public void mergeSort(int[] array){
int temp = array.length/2;
if(temp == 0){
return;
}
int[] a = new int[temp];
int[] b = new int[array.length - temp];
for(int i=0;i<temp;i++){
a[i] = array[i];
}
for(int i=0;i<array.length - temp;i++){
b[i] = array[temp + i];
}
if(a.length != 1){
this.mergeSort(a);
}
if(b.length != 1){
this.mergeSort(b);
}
int aIndex = 0;
int bIndex = 0;
int arrayIndex = 0;
while(aIndex != a.length && bIndex != b.length){
if(a[aIndex] > b[bIndex]){
array[arrayIndex++] = b[bIndex++];
continue;
}else if(a[aIndex] < b[bIndex]){
array[arrayIndex++] = a[aIndex++];
continue;
}else{
array[arrayIndex++] = a[aIndex++];
array[arrayIndex++] = b[bIndex++];
}
}
while(bIndex < b.length){
array[arrayIndex++] = b[bIndex++];
}
while(aIndex < a.length){
array[arrayIndex++] = a[aIndex++];
}
}
效率:
由于需要一个被排序数组等大小的数组来辅助排序,空间复杂度比较高,时间复杂度为:O(N*logN)
分享到:
相关推荐
C语言所有排序大全,解决了您日常上课考试学习的需要,在这里每一个程序都没有错误,其中压缩包包括了归并排序;基数排序;快速排序;冒泡排序;选择排序;折半排序;希尔排序这些日常排序,因为是全集所以大家踊跃...
选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
快速排序、归并排序、基数排序等排序算法比较,比较时间性能,采用C++语言实现。。。
冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序源码实现,里面有详细讲解,对新手应该有帮助
7大排序算法(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)实现源码
c代码-排序:归并排序的递归算法
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
c代码-排序:归并排序的非递归算法
算法设计实验报告,包括:快速排序和归并排序两种算法各自的基本思想、时间复杂度分析,C++实现代码,两种算法运行时间的比较,运行截图,实验心得。
十余年JAVA从业经验,精通JAVA技术体系,有志于做JAVA技能提升的朋友可与我联系,交个朋友 十余年JAVA从业经验,精通JAVA技术体系,有志于做JAVA技能提升的朋友可与我联系,交个朋友 十余年JAVA从业经验,精通JAVA...
插入排序、选择排序、希尔排序、堆排序、冒泡、双向冒泡、快速排序、归并排序、递归的归并排序、基数排序
JAVA排序算法: 直接插入,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,包括算法的详细介绍,以及对几种算法的详细测试
直接插入排序 选择排序 堆排序 归并排序 快速排序 冒泡排序等七种排序方法
简单易懂的归并排序,C语言写的。包看包懂......
scau归并排序归并排序 归并排序:就是利用归并的思想,实现的排序方法。要实现归并排序,需要完成两个步骤。一是“分”,就是将数组分到原子级;二是“合”,将原子级别的元素两两排序,合并,最终得到结果。 归并...