希尔排序(shellsort)算法实现

简介:     希尔排序(shellsort)又叫增量递减(diminishing increment)排序,是由D.L. Shell发明的,这个算法是通过一个逐渐减小的增量使一个数组逐渐趋近于有序从而达到排序的目的。
    希尔排序(shellsort)又叫增量递减(diminishing increment)排序,是由D.L. Shell发明的,这个算法是通过一个逐渐减小的增量使一个数组逐渐趋近于有序从而达到排序的目的。

      假设有一个数组int data[16] = {...}。 首先将这个增量设为16 / 2 = 8, 这样就将这个数组分成了8个子数组,它们的索引是0, 8    1, 9   2, 10等等 。对这些子数组进行排序。然后再使增量为8 / 2 = 4,这样就将原数组分成了4个子数组,它们的索引分别是0, 4, 8, 12    1, 5, 9, 13等等。再对这四组数进行排序,直到增量为1。
     以上所描述的增量递减只是一种方法,这种方法并不是最有效率的。如f(n) = 3 * f(n - 1) + 1  f(1) = 1   (..., 121, 40, 13,  4, 1)就比上面的取增量的方法好。这种方法的时间复杂度是 O(n ^1.5)

算法如下

#include  < stdio.h >

void  output_array( int  data[],  int  n)
{
    
int  i;
    
for (i  =   0 ; i  <  n; i ++ )
        printf(
" %d  " , data[i]);
    printf(
" /n " );
}
void  swap( int   * a,  int   * b)
{
    
int  x;
    x 
=   * a;
    
* =   * b;
    
* =  x;
}
void  insertion_sort( int  data[],  int  n,  int  increment)
{
    
int  i, j;
    
for (i  =  increment; i  <  n; i  +=  increment)
        
for (j  =  i; j  >=  increment  &&  data[j]  >  data[j  -  increment]; j  -=  increment)
            swap(
& data[j],  & data[j  -  increment]);
}
void  shellsort( int  data[],  int  n)
{
    
int  i, j;
    
for (i  =  n  /   2 ; i  >   2 ; i  /=   2 )
        
for (j  =   0 ; j  <  i; j ++ )
            insertion_sort(data 
+  j, n  -  j, i);
    insertion_sort(data, n, 
1 );
}
int  main()
{
    
int  data[]  =  { 5 3 1 665 77 66 44 11 10 9 8 6 };
    output_array(data, 
12 );
    shellsort(data, 
12 );
    output_array(data, 
12 );
    
return   0 ;
}


国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

目录
相关文章
|
3月前
|
算法 搜索推荐 Shell
【408数据结构与算法】—希尔排序 Donald Shell(十七)
【408数据结构与算法】—希尔排序 Donald Shell(十七)
|
9月前
|
算法 搜索推荐 Shell
|
9月前
|
存储 算法 搜索推荐
|
搜索推荐 算法 Shell
【408数据结构与算法】—希尔排序 Donald Shell(十七)
先将整个待排记录序列分割成若干子序列,分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序
【408数据结构与算法】—希尔排序 Donald Shell(十七)
|
机器学习/深度学习 搜索推荐 算法
图解希尔排序——希尔排序算法(shell sort)
图解希尔排序——希尔排序算法(shell sort)
232 0
图解希尔排序——希尔排序算法(shell sort)
|
算法 搜索推荐 Shell
python实现【希尔排序】(Shell Sort)
python实现【希尔排序】(Shell Sort)
python实现【希尔排序】(Shell Sort)
|
算法 搜索推荐 Java
经典算法之希尔排序(Shell Sort)
经典算法之希尔排序(Shell Sort)
123 0
经典算法之希尔排序(Shell Sort)
|
人工智能 算法 搜索推荐
希尔排序(Shell Sort)
算法介绍 算法描述 动图演示 算法分析 代码实现 参考
希尔排序(Shell Sort)
|
存储 人工智能 算法
希尔排序(shell‘ sort)
希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进。希尔排序又叫缩小增量排序 基本思想: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
799 0