Shell Sort(希尔排序)

来源:互联网 发布:大数据经典案例 编辑:程序博客网 时间:2024/06/06 11:25

#include <stdio.h>  

#include <stdlib.h>  

#define maxsize 10  

typedef struct{  

    int a[maxsize+1];  

    int length;  

}sqlist;  

void shellsort(sqlist*l){  

    int i,j;  

    int increment=l->length;   

      

    do{  

        increment=increment/3+1;  

    for(i=increment+1;i<=l->length;i++){  

        if(l->a[i]<l->a[i-increment]){  

            l->a[0]=l->a[i];  

            for(j=i-increment;j>0 && l->a[j]>l->a[0];j -= increment) 

            {  

                l->a[j+increment]=l->a[j];//红色字体作用是交换a[i]a[i-increment]的值  

            }  

            l->a[j+increment]=l->a[0];   

        }  

    }  

    }  

    while(increment>1); //(increment<=1时结束循环

  

      

}   

int main(){  

    int i;

  sqlist *l;

    l=(sqlist*)malloc(sizeof(sqlist));

    scanf("%d",&l->length);  

    for(i=1;i<=l->length;i++){  

        scanf("%d",&l->a[i]);  

    }   

    shellsort(l);  

    for(i=1;i<=l->length;i++){  

        printf("%d\n",l->a[i]);  

    }  

    return 0;  

0 0