经典排序算法之归并排序

xiaoxiao2021-02-28  119

点击(此处)折叠或打开

#include<iostream> using namespace std; int *aux = NULL; void sort(int *a,int,int); void merge(int *a,int lo,int mid,int hi)//归并有序子数组 {     int i =lo,j = mid+1;     for (int k = lo;k <= hi;k++)     {         aux[k] = a[k];     }     for (int k = lo;k <= hi;k++)     {         if (i > mid) a[k] = aux[j++];         else if (j > hi) a[k] = aux[i++];         else if (aux[j]<aux[i]) a[k] = aux[j++];         else    a[k] = aux[i++];     } } void sort(int *a,int n) {     aux = new int[n];     sort(a,0,n-1);     delete[] aux; } //将两个子数组排序,通过归并两个字数组来将这个数组排序 void sort(int *a,int lo,int hi) {     if (hi <= lo) return;     int mid = lo + (hi-lo)/2;     sort(a,lo,mid);     sort(a,mid+1,hi);     merge(a,lo,mid,hi); } int main() {     int a[] = {1,2,4,3,5};     sort(a,5);     for (int i = 0;i < 5;i++)     {         cout << a[i]<< " ";     }     cout << endl;     return 0; } 首先是两两归并,然后是四四归并,然后是八八归并,一直下去!(自低向下)

点击(此处)折叠或打开

#include<iostream> using namespace std; int *aux = NULL; void Merge(int *a,int lo,int mid,int hi) {     int i = lo,j = mid+1;     for (int k = lo;k <= hi;k++)     {         aux[k] = a[k];     }     for (int k = lo;k <= hi;k++)     {         if (i > mid) a[k] = aux[j++];         else if (j > hi) a[k] = aux[i++];         else if (aux[i]<aux[j]) a[k] = aux[i++];         else    a[k] = aux[j++];     } } void sort(int *a,int n) {     int N = n;     aux = new int[N];     for (int sz = 1;sz < N;sz = sz+sz)     {         for (int lo = 0;lo<N-sz;lo += sz+sz)             Merge(a,lo,lo+sz-1,min(lo+sz+sz-1,N-1));     } } int main() {     int a[] = {5,4,3,2,1};     sort(a,5);     for (int i = 0;i < 5;i++)     {         cout << a[i]<<" ";     }     cout << endl;     return 0; } <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 阅读(95) | 评论(0) | 转发(0) | 0

上一篇:经典排序算法之堆排序

下一篇:linux内存管理--缺页异常处理

相关热门文章 test123编写安全代码——小心有符号数...使用openssl api进行加密解密...一段自己打印自己的c程序...彻底搞定C语言指针详解-完整版... 给主人留下些什么吧!~~ 评论热议
转载请注明原文地址: https://www.6miu.com/read-57588.html

最新回复(0)