码迷,mamicode.com
首页 > 编程语言 > 详细

希尔排序

时间:2016-05-06 21:54:11      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

将待排序数学序列分成n个子序列,子序列中每个元素相隔k,如:10个元素:4,5,6,7, 8,9, 10, 1, 2, 3,k=3时,4,7,10,3为一个子序列,5,8,1为一个子序列,6,9,2为一个子序列,不停减小k,通过插入排序方式对该子序列进行排序,最后达到有序

#include<stdio.h>
#include<windows.h>
int a[20];
void incrementSort(int n){
   int increment = n;
   while(increment>1){

       printf("\nincrement:%d\n",increment);
       increment=increment/3+1;
       for(int i=increment+1;i<=n;i++){
            if(a[i]<a[i-increment]){
               a[0]=a[i];
               int j;
               for(j=i-increment;j>=1&&a[j]>a[0];j-=increment){
                  a[j+increment]=a[j];
               }
               a[j+increment]=a[0];
            }
       }
       for(int i=1;i<=10;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
    system("pause");
    }

}

int main(){
  int n;
  scanf("%d",&n);
  for(int i=1;i<=n;i++){
    scanf("%d",&a[i]);
  }
  incrementSort(n);
  for(int i=1;i<=n;i++){
    printf("%d ",a[i]);
  }
}

 

希尔排序

标签:

原文地址:http://www.cnblogs.com/lhppom/p/5467169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!