希尔排序

希尔排序详细图解来自:排序:希尔排序(算法) - 简书 (jianshu.com)

希尔排序与插入排序最大的差别:希尔排序的步长是gap,而插入排序的步长是1

#include<stdio.h>
//希尔排序
void ShellSort(int *arr,int n)
{
    for(int gap=n/2;gap>0;gap/=2)   //控制步长gap的变化
    {
        for(int i=gap;i<n;i++)      //未排序部分
        {
            for(int j=i-gap;j>=0;j-=gap)    //已排序部分
            {
                if(arr[j]>arr[j+gap])
                {
                    int temp=arr[j];
                    arr[j]=arr[j+gap];
                    arr[j+gap]=temp;
                }
            }
        }
    }
}
int main()
{
    int arr[10]={1,4,2,9,6,3,0,8,5,7};
    ShellSort(arr,10);
    for(int i=0;i<10;i++)
    {
        printf("%d\t",arr[i]);
    }
    printf("\n");
    return 0;
}

 

posted @ 2021-10-28 17:34  疯在其中不愿醒  阅读(43)  评论(0)    收藏  举报