用C++实现O(nlogn)算法排序,不用算法库
时间: 2024-03-16 20:47:28 浏览: 50
NlogN经典排序算法的实现-希尔排序,快速排序,归并排序.zip
可以使用归并排序(Merge Sort)来实现O(nlogn)时间复杂度的排序算法。具体实现步骤如下:
1. 定义一个merge函数,用于将两个有序序列合并成一个有序序列。
2. 定义一个mergeSort函数,用于递归地将序列分成两半,分别进行排序,再将两个有序序列合并成一个有序序列。
3. 在main函数中调用mergeSort函数对整个序列进行排序。
下面是C++代码实现:
```
#include <iostream>
using namespace std;
void merge(int arr[], int l, int m, int r)
{
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
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++;
}
}
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);
}
}
int main()
{
int arr[] = { 12, 11, 13, 5, 6, 7 };
int arr_size = sizeof(arr) / sizeof(arr[0]);
cout << "Given array is \n";
for (int i = 0; i < arr_size; i++)
cout << arr[i] << " ";
mergeSort(arr, 0, arr_size - 1);
cout << "\nSorted array is \n";
for (int i = 0; i < arr_size; i++)
cout << arr[i] << " ";
return 0;
}
```
阅读全文