100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > MergeSort 归并排序

MergeSort 归并排序

时间:2020-09-26 00:32:53

相关推荐

MergeSort 归并排序

归并排序算法:

思路,设置left,mid,right三个参数,对mid的左和右分别再进行递归调用归并排序算法,直到每个数组中只有1时返回,最终完成归并排序,具体思路见程序

注:归并排序的时间复杂度为O(nlogn),空间复杂度为O(n+logn)。

代码实现:

//归并排序(排序后为从小到大)#include <iostream> #include <algorithm> using namespace std; void Merge(int *data, int left, int mid, int right){int *temp = new int[right - left + 1];//new一个temp保存归并后的数据int ind = 0, i = left, j = mid + 1;while (i <= mid&&j <= right){//将两个待归并的数据进行比较存入,注意边界值temp[ind++] = (data[i] < data[j]) ? data[i++] : data[j++];}while (i <= mid){//将一个数组中剩余的数据存入temp[ind++] = data[i++];}while (j <= right){temp[ind++] = data[j++];}for (int i = left; i <= right; ++i){//将temp中的数据放到data里data[i] = temp[i - left];}delete[] temp;}void MSort(int *data, int left, int right){//递归实现归并排序if (left >= right) return;else{int mid = left + (right - left) / 2;MSort(data, left, mid);//分别对左右进行归并排序MSort(data, mid + 1, right);Merge(data, left, mid, right);}}int main(){ int a[] = { 9, 1, 5, 8, 3, 7, 4, 6, 2 };cout << "before sorted:" << endl;for (size_t i = 0; i < 9; ++i){//输出 cout << a[i] << " ";}cout << endl;int a_size = sizeof(a) / sizeof(a[0]);int *p = a;MSort(p,0,a_size-1);cout << "after sorted:" << endl;for (size_t i = 0; i < 9; ++i){//输出cout << p[i] << " ";}cout << endl; return 0;}

程序输出:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
扩展阅读