这篇文章主要介绍如何使用c++实现归并排序算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
具体如下:
<强>归并排序强>
归并排序(合并排序)是建立在归并操作上的一种有效的排序算法。
该算法是采用分治法(分治法)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列。
即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
<强>归并过程强>
1,比较一个[我]和[j]的大小,若[我]≤[j],则将第一个有序表中的元素一个[我]复制到临时[k]中,并令我和k分别加上1;
2,否则将第二个有序表中的元素一个[j]复制到临时[k]中,并令j和k分别加上1。
3,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。
归并排序的算法我们通常用递归实现,先把待排序区间(第一,去年)以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[第一,去年].
<强>归并操作的工作原理强>
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾,将另一序列剩下的所有元素直接复制到合并序列尾。
<强>算法复杂度强>
时间复杂度为O (nlogn)这是该算法中最好,最坏和平均的时间性能。
空间复杂度为O (n)
比较操作的次数介于(nlogn)/2和nlogn - n + 1。
赋值操作的次数是(2 nlogn)。
归并排序比较占用内存,但却是一种效率高且稳定的算法。
<强>算法c++代码强>
//合并两个序列 void mergeArray (int arr [], int 首先,int 中期,,int 最后,int 临时[]) { int 才能;小姐:=,第一; int 才能;j =, mid +, 1; int 才能;m =, mid ; int 才能;n =,最后; int 才能;k =, 0; while 才能;(=小姐:& lt; m ,,, j<=n) {才能 ,,,if (arr[我],& lt;=, arr [j]) ,,,,,临时(k + +),=, arr (+ +); ,,, ,,,,,临时(k + +),=, arr [j + +); ,,} while 才能;(=小姐:& lt;米) ,,,临时(k + +),=, arr (+ +); while 才能;(j & lt;=, n) ,,,临时(k + +),=, arr [j + +); for 才能;(小姐:=,0;,小姐:& lt;, k;,我+ +) ,,,arr [first +,我],=,临时[我]; } void mySort (int arr [], int 首先,int 最后,int 临时[]) { if 才能;(first & lt;,最后) {才能 ,,,int mid =,(时间+ first 最后),/,2; ,,,mySort(加勒比海盗,,,,,中期,临时); ,,,mySort(加勒比海盗,中期+ 1,,,,临时); ,,,mergeArray(加勒比海盗,,,,,中期,最后,临时); ,,} } bool 归并排序(int arr [], int 兰) { int * p 才能=,new int (len); if 才能;(NULL ==, p) ,,,return 假; mySort才能(加勒比海盗,0,,len 作用;1,p); 删除才能[],p; return 才能;真实; }
<>强算法测试强>
# include & lt; iostream> using namespace 性传播疾病;//上述归并排序源码 int main () { int 才能arr[],=,{, 2, 23岁,32岁,34岁,45岁,6日,5日,65年,7日,6日,87年,87年,8日,798年,34岁,35岁,46岁,45岁,65年,756年,876年,8日,7日,87年,87年,5日,34岁,344年,,3,,32,}; int 才能;len =, sizeof (arr),/, sizeof (int); 归并排序才能(加勒比海盗,len); for 才能;(int 小姐:=,0;,小姐:& lt;, len;,我+ +) ,,,cout & lt; & lt;, arr[我],& lt; & lt;,,,,, cout 才能;& lt; & lt;, endl; 系统才能(“pause"); }
运行结果:
2, 3, 5, 5, 6, 6, 7, 7, 8, 8日,23日,32,32岁,34岁,34岁,34岁,35岁,45岁,45岁,46,65,65,87,87,87,87,344,756,798,876 请按任意键继续只只。
以上是“如何使用c++实现归并排序算法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!