希爾排序/shell sort

#include<stdio.h>
#include<stdlib.h>

void shellsort(int array[],int len)
{
        int dk;
        int i;
        int j;
        for(dk=len/2;dk>=1;dk/=2)
        {
                for(i=dk+1;i<=len;++i)
                {
                        if(array[i]<array[i-dk])
                        {
                                array[0]=array[i];
                                for(j=i-dk;j>0&&array[0]<array[j];j-=dk)
                                {
                                        array[j+dk]=array[j];
                                }
                                array[j+dk]=array[0];
                        }
                }
        }

}

int main(int argc,char *argv[])
{
        FILE *fp_input=stdin;
        FILE *fp_output=stdout;
        fp_input=fopen(argv[1],"r");

        int num;
        fscanf(fp_input,"%d",&num);

        int *array;
        int i;

        array=(int *)malloc((num+1)*sizeof(int));
        for(i=1;i<=num;i++)
        {
                fscanf(fp_input,"%d",&array[i]);
        }

        shellsort(array,num);

        for(i=1;i<=num;i++)
        {
                fprintf(fp_output,"%d",array[i]);
        }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章