为啥把插入排序,希尔排序,归并排序纳入一类排序思想
插入排序,希尔排序,归并排序这三种排序方式其实是依次优化的,希尔排序是插入排序的一种升级,归并排序是插入算法的升级,效率比希尔排序还好
时间复杂度 : 插入排序 > 希尔排序 > 归并排序
(ps :如果在学习这三个算法之前需要掌握 时间复杂度计算方式 递归 和 插入算法 链接如下
1.递归&分治&回溯
2.时间复杂度
3.插入排序
)
归并排序的思想
归并排序的过程分为 拆分 和 归并
拆分:将一个等待排序数组拆分成更多更小的数组,知道不能拆为止
归并:将拆分后的数组合并,在合并的过程中通过插入算法进行合并

public static void main(String[] args) {
Random random = new Random();
int[] array = new int[32];
for (int i =0;i< 31;++i){
array[i] =random.nextInt(100);
}
start(array);
for (int i =0;i< array.length;++i){
System.out.print(array[i] + " ");
}
}
/**
*
* @param array
*/
public static void start(int[] array){
doSort(array,0,array.length);
}
/**
*
* @param array
* @param left 需要排序的array的左边索引位置
* @param right 需要排序的array的右边索引位置
*/
public static void doSort(int[] array,int left,int right){
if (left >= right){
return;
}
int doc = (left+right)/2;
doSort(array,left,doc);
doSort(array,doc+1,right);
//里面是一个插入算法
for (int i=left +1;i< right;++i){
//取出需要比较的数据
int temp = array[i];
int j = i-1;
for (;j>=left;--j){
if (temp < array[j]){
array[j+1] = array[j];
}else {
break;
}
}
array[j+1] = temp;
}
}
时间复杂度: O(nlogn)
稳定性 :稳定
2047

被折叠的 条评论
为什么被折叠?



