zoukankan      html  css  js  c++  java
  • 希尔排序

    基本思想:先将整个待排序的记录序列分割成若干个子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录依次进行直接插入排序。

      1)操作方法:选择一个增量序列t1,t2,...,tk,其中ti>tj,tk=1;

      2)按增量序列个数k,对序列进行k趟排序;

      3)每趟排序,根据对应的增量ti,将待排序列分割成若干个长度为m的子序列,分别对各个子序列进行直接插入排序。仅增量因子为1时,整个序列作为一个表来处理,表长度即为整个序列的长度。

        

    代码实现:

     1 private void shellSort(int[] a) {
     2     int dk = a.length/2; 
     3     while( dk >= 1 ){ 
     4         ShellInsertSort(a, dk); 
     5         dk = dk/2;
     6     }
     7 }
     8 private void ShellInsertSort(int[] a, int dk) {
     9     //类似插入排序,只是插入排序增量是 1,这里增量是 dk,把 1 换成 dk 就可以了。
    10     for(int i=dk;i<a.length;i++){
    11         if(a[i]<a[i-dk]){
    12             int j;
    13             int x=a[i];//x 为待插入元素
    14             a[i]=a[i-dk];
    15             for(j=i-dk; j>=0 && x<a[j];j=j-dk){
    16                 //通过循环,逐个后移一位找到要插入的位置。
    17                 a[j+dk]=a[j];
    18             }
    19         a[j+dk]=x;//插入
    20         }
    21     }
    22 }
  • 相关阅读:
    利用Python爬取疫情数据并使用可视化工具展示
    接口与多态
    defer 延迟调用
    Spring缓存注解
    SpringAOP
    Mybatis动态SQL语句
    SpringMVC
    Spring Boot入门
    vue中使用JS实现倒计时功能
    springboot使用aop注解在controller层打印请求和响应报文
  • 原文地址:https://www.cnblogs.com/HuiH/p/11763874.html
Copyright © 2011-2022 走看看