希尔排序

試著忘記壹切 提交于 2020-01-24 14:54:15

希尔排序

**时间复杂度:**最好 O(N)
最坏 O(n ^ 2)

稳定性: 比较时加了" = ",则不稳定,否则稳定

实现: 组内直接插入排序,最后看成一组,进行插入排序。

思想与直接插入排序类似,不过增量变成了组的差值(这是因为在进行组内排序)

分组-》组内插入排序-》最后看成一组

代码示例:

public static void shell(int[] array,int gap){
    for(int i = gap;i < array.length;i++) {
        int tmp = array[i];
        int j = i - gap;
        for(;j >= 0;j -= gap){
           if(array[j] > tmp){
              array[j + gap] = array[j];
           }else {
               break;
           }
        }
        array[j + gap] = tmp;
     }
 }
 public static void shellSort(int[] array) {
    //这里先分为5组,再分为3组,之后看成一组
    int[] drr = {5,3,1};
    for(int i = 0;i < drr.length;i++){
        shellSort(array,drr[i]);
    }
 }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!