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

    希尔排序法是针对于直接插入法的优化。

    希尔排序里面有一个增量d,最后一个增量值必须等于1 ,

    下面是两种实现方法:

     1 void shellsort(int *L , int n)
     2 {
     3     int i = 0 ,j = 0,k = 0,d = 0;
     4 
     5     //for(d =n ; d>=1 ; d = d/3+1) // 这样子会陷入死循环
     6     for(d =n/2 ; d>0 ; d = d/2)
     7     {
     8         for(i =0 ;i < n-d ; i = i++)
     9         {
    10             if(L[i]  > L[i+d])
    11             {
    12                 int temp = L[i+d];
    13                 for(j = i ; j>= 0 && L[j] > temp ; j = j-d)
    14                 {
    15                     L[j+d] = L[j];
    16                     k = j;
    17                 }
    18                 L[k] = temp;
    19             }
    20         }
    21     }
    22 }
     1 void shellsort02(int *L , int n)
     2 {
     3     int i  ,j ,d ;
     4 
     5     //for(d =n ; d>1 ; d = d/3+1)
     6     d = n;
     7     do
     8     {
     9         d= d/3+1;
    10 
    11         for(i =0 ;i < n-d ; i = i+1)
    12         {
    13             if( L[i]  > L[i+d] )
    14             {
    15                 int k = 0;
    16                 int temp = L[i+d];
    17                 for(j = i ; j >=0  && L[j] > temp ; j = j-d)//出了很多错误,这里开始设定的是j > 0,而出错。
    18                     //这里的i  从零开始,却让j 大于零,这本身就不对。
    19                 {
    20                     L[j+d] = L[j];
    21                     k = j;
    22                 }
    23                 L[k] = temp;
    24             }
    25         }
    26     }
    27     while(d > 1);
    28 }

    程序里面的增量,最好的一种情况,大家一致在寻找,但是现阶段d = d/3+1 是比较好的。

    里面虽然有三个for 循环,但是 时间复杂度

  • 相关阅读:
    第六天
    《分布式架构中数据一致性常见的几个问题》阅读心得
    第五天
    软件开发记录第四天
    资料整理
    Mongodb_分片集群模式
    MongoDB_spring整合mongodb
    安装环境
    MongoDB_副本集集群模式
    MongoDB_java连接MongoDB
  • 原文地址:https://www.cnblogs.com/xiaochige/p/8367187.html
Copyright © 2011-2022 走看看