天天看點

c語言實作10個數由小到大排序(希爾排序法)

希爾排序:設定一個元素間隔增量gap,将序列按照間隔數gap從第一個元素開始依次分成若幹個子序列,在子序列中運用排序方法(如冒泡排序法),然後縮小增量gap重新将整個序列按照新的間隔數gap進行操作,再對每個子序列進行排序,直到間隔數為1為止。

如何選取gap值:經驗表示gap取值為序列長度的一半,後一趟排序的gap取值為前一趟gap取值的一半即可。

例如序列“5,30,7,9,20,10”操作步驟如下:

c語言實作10個數由小到大排序(希爾排序法)

代碼如下:

#include<stdio.h>

void ShellSort(int a[],int n)
{
    int i,j,temp;
    int flag,gap=n;
    while(gap>)
    {
        gap=gap/;              //每次減半
        flag=;
        while(flag)
        {
            flag=;
            for(i=;i<n-gap;i++)
            {
                j=i+gap;
                if(a[i]>a[j])
                {
                    temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                    flag=;
                }
            }
        }
    }
}

void main()
{
    int a[],i;
    printf("please input 10 numbers:\n");
    for(i=;i<;i++)
        scanf("%d",&a[i]);
    printf("The array is:\n");
    for(i=;i<;i++)
        printf("%-4d",a[i]);
    ShellSort(a,);
    printf("\nAfter sort the array is:\n");
    for(i=;i<;i++)
        printf("%-4d",a[i]);
    printf("\n");
}
           
c語言實作10個數由小到大排序(希爾排序法)

繼續閱讀