在devc++上选一组数据进行归并排序和快速排序
时间: 2024-11-04 19:10:29 浏览: 16
数据结构c语言代码(devc++版)
在Dev-C++中,你可以使用C++标准库提供的`sort()`函数来进行内置的排序,包括归并排序(`std::merge_sort()`)和快速排序(`std::quick_sort()`),但如果你想直接编写这两种排序算法,这里我会分别给出基本的实现:
**归并排序:**
归并排序是一种分治策略的典型应用,它将数组分为两半,递归地排序这两半,然后合并结果。这是一种稳定的排序算法,适用于大数据集。
```cpp
void mergeSort(int arr[], int l, int r) {
if (l < r) {
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
}
void merge(int arr[], int l, int m, int r) {
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (int i = 0; i < n1; i++)
L[i] = arr[l + i];
for (int j = 0; j < n2; j++)
R[j] = arr[m + 1+ j];
int i = 0, j = 0, k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
```
**快速排序:**
快速排序也是分治策略,选择一个基准元素,将数组分割成两部分,一部分的所有元素都小于基准,另一部分都大于或等于基准,然后递归处理这两个部分。
```cpp
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
std::swap(arr[i], arr[j]);
}
}
std::swap(arr[i + 1], arr[high]);
return (i + 1);
}
```
注意:在实际项目中,使用`std::sort()`更为常见,因为它已经高度优化过了。
阅读全文