算法基础--选择排序
Posted 谓戒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法基础--选择排序相关的知识,希望对你有一定的参考价值。
希尔排序(Shell Sort)是插入排序的一种,也是缩小增量排序,是直接排序算法的一种更高效的改进版。希尔排序是非稳定算法。
基本思想:
将元素进行分组,然后对每组元素进行排序,在每组元素都有序之后,就可以对所有的分组利用插入排序进行最后一次排序,这样可以显著减少交换的此时,以达到加快排序速度的目的。
(1)先去一个小于n的整数d1作为第一个增量,把全部元素分成d1组,所有距离为d1的倍数的元素放在同一个组中,
(2)先在各组内进行直接插入排序,然后,取第二个增量d2<d1,重复上述的分组和排序,直到所取的增量dt=1(dt < dt-1 < ... < d1),即所有元素放在同一个组中进行直接排序插入排序为止。
时间复杂度分析:
(1)当元素初态基本有序时,直接插入排序所需的比较和交换次数均比较少,此时时间复杂度为O(n);
(2)当所有元素都是反序时,此时的比较和交换次数是最多的,时间复杂度O(n^2);
(3)所以平均时间复杂度O(n^3/2);
实例:
public static void shellSort(int[] arr){
if(arr == null) return ;
int j = 0;
int temp = 0 ;
int len = arr.length /2;
for(int increment = len ; increment > 0 ; increment /= 2){
for(int i = increment ; i <arr.length; i++){
temp = arr[i];
for(j = i ; j >= increment ; j -= increment){
if(temp < arr[j - increment]){
arr[j] = arr[j - increment];
}else{
break;
}
}
arr[j] = temp;
}
}
}
以上是关于算法基础--选择排序的主要内容,如果未能解决你的问题,请参考以下文章