• 希尔排序


    1. void shellSort(int *arr,int Length){
    2. int temp;
    3. for(int gap=Length/2; gap>0;gap/=2){
    4. for(int i=0;i<gap; i++){
    5. for(int j=gap+i;j<Length;j+=gap){
    6. temp=arr[j];
    7. int k=j-gap;
    8. while(k>=0&&arr[k]>temp){
    9. arr[k+gap]=arr[k];
    10. k-=gap;
    11. }
    12. arr[k+gap]=temp;
    13. }
    14. }
    15. }
    16. }
    上面的希尔排序很简单:
        该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
       

    1. for(int gap=Length/2; gap>0;gap/=2)
    这是是设置不同的步长进行排序,每次步长除2.
    1. for(int i=0;i<gap; i++)
    这是对每组进行排序,如第一次分成两组,步长就是gap=10/2=5
    则有了5组了。

    1. for(int j=gap+i;j<Length;j+=gap){
    2. temp=arr[j];
    3. int k=j-gap;
    4. while(k>=0&&arr[k]>temp){
    5. arr[k+gap]=arr[k];
    6. k-=gap;
    7. }
    8. arr[k+gap]=temp;
    9. }
    组内进行插入排序。




















  • 相关阅读:
    Mysql系列【解决mysql连接数太多】
    并发编程系列【线程池七大核心参数】
    C信号处理的基础
    设计模式之Command
    Ext文件系统
    内存管理
    设计模式之Decorator Pattern
    设计模式之singleton
    Quicklz压缩算法
    设计模式之Factory
  • 原文地址:https://www.cnblogs.com/yml435/p/4655556.html
Copyright © 2020-2023  润新知