p1177选择排序c++
时间: 2023-12-02 10:42:38 浏览: 25
以下是p1177选择排序的C++代码示例:
```cpp
#include <iostream>
using namespace std;
void selectionSort(int arr[], int n) {
int i, j, min_idx;
for (i = 0; i < n-1; i++) {
min_idx = i;
for (j = i+1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;
swap(arr[min_idx], arr[i]);
}
}
int main() {
int n;
cin >> n;
int arr[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
selectionSort(arr, n);
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
```
相关问题
归并排序c++
好的,以下是C++实现归并排序的代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
void merge(vector<int>& nums, int left, int mid, int right) {
vector<int> temp(right - left + 1);
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (nums[i] <= nums[j]) {
temp[k++] = nums[i++];
}
else {
temp[k++] = nums[j++];
}
}
while (i <= mid) {
temp[k++] = nums[i++];
}
while (j <= right) {
temp[k++] = nums[j++];
}
for (int p = 0; p < temp.size(); p++) {
nums[left + p] = temp[p];
}
}
void mergeSort(vector<int>& nums, int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
mergeSort(nums, left, mid);
mergeSort(nums, mid + 1, right);
merge(nums, left, mid, right);
}
}
int main() {
vector<int> nums = { 12, 11, 13, 5, 6, 7 };
mergeSort(nums, 0, nums.size() - 1);
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
在这个代码中,我们使用了一个`vector`来存储数组元素,这样可以方便地进行合并操作。`merge()`函数将两个已排序的子数组合并成一个子数组。`mergeSort()`函数使用递归的方式将数组分成两半,直到每个子数组的长度为1,然后调用`merge()`函数将它们合并成一个已排序的数组。最后,`main()`函数初始化一个`vector`并调用`mergeSort()`函数对其进行排序。
结构体向量排序 c++
可以使用`sort`函数来对结构体向量进行排序。假设有一个结构体`Person`,它有两个成员变量`name`和`age`,可以按照年龄从小到大排序,代码如下:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Person {
string name;
int age;
};
bool cmp(const Person& a, const Person& b) {
return a.age < b.age;
}
int main() {
vector<Person> people{ {"Tom", 20}, {"Jerry", 18}, {"Alice", 22} };
sort(people.begin(), people.end(), cmp);
for (auto& p : people) {
cout << p.name << " " << p.age << endl;
}
return 0;
}
```
输出结果为:
```
Jerry 18
Tom 20
Alice 22
```
其中,`cmp`函数是用来指定排序规则的,它返回值为`true`表示第一个参数应该排在第二个参数之前,返回值为`false`表示第一个参数应该排在第二个参数之后。在本例中,按照年龄从小到大排序,所以`cmp`函数中使用`a.age < b.age`来进行比较。