shell sort

来源:互联网 发布:如何分析竞价数据 编辑:程序博客网 时间:2024/06/06 03:17
#include <stdio.h>#include <string.h>#include <stdlib.h>int prime[100];int vis[10000];void IsPrime(){    int i, j, cnt=0;    prime[cnt++]=1;    for(i=2; i<=100; i++){        if(!vis[i]){            for(j=i+i; j<=100; j+=i){                vis[j]=1;            }            prime[cnt++]=i;        }    }}void print(int *a, int len){    int i;    for(i=0; i<len; i++)        printf("%d%c", a[i], i==len-1?'\n':' ');}void shell(int *a, int len){    int step;    int i, k;    for(k=1; k<=100; k++)        if(prime[k]>=len/2) break;    for(step=prime[k--]; step>=1; step=prime[k--]){        for(i=0; i<len&&i+step<len; i++){            int temp=a[i+step];            int r=i+step, l=i;            while(l>=0){                if(a[l]<a[r]) break;                a[r]=a[l];                a[l]=temp;                r=l;                l--;            }        }        //print(a, len);    }    return;}int a[1000];int main(){    int n;    IsPrime();    while(scanf("%d", &n), n){        int i;        for(i=0; i<n; i++){            scanf("%d", &a[i]);        }        shell(a, n);        print(a, n);    }    return 0;}

原创粉丝点击