算法基础--选择排序

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;

        }

    }

}



以上是关于算法基础--选择排序的主要内容,如果未能解决你的问题,请参考以下文章

java基础算法-选择排序

三大基础排序算法(冒泡排序,选择排序,插入排序)

基础算法——排序

《算法零基础100例》(第37例) 基础排序 - 选择排序

基础排序算法之-选择排序

基础排序算法 c#