排序算法(二)希尔排序

来源:互联网 发布:网络购物合同纠纷 编辑:程序博客网 时间:2024/06/04 19:02

希尔排序算法也称为缩小增量算法;

算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行分组,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,直接按照直接插入排序,排序完成。

代码实现:

//shell(希尔)排序——多次利用直接插入排序//一趟希尔过程static void Shell(int *arr,int len,int gap)//gap,组数或间隔,间隔是几,就是几组{    //跟直接插入排序非常相似    int tmp;    int i;    int j;    for(i=gap;i<len;i++)    {        tmp=arr[i];        for(j=i-gap;j>=0;j-=gap)//从后往前找位置        {            if(arr[j]<=tmp)            {                break;            }            else            {                arr[j+gap]=arr[j];//移数据            }        }        arr[j+gap]=tmp;//放数据    }}void ShellSort(int *arr,int len){    int d[]={5,3,1};//gap    for(int i=0;i<sizeof(d)/sizeof(d[0]);i++)    {        Shell(arr,len,d[i]);    }}void Show(int *arr,int len){    for(int i=0;i<len;i++)    {        printf("%d ",arr[i]);    }    printf("\n");}int main(){    int arr[]={32,2,65,234,76,33,35,66,2,65,3,2,8,33,11};    ShellSort(arr,sizeof(arr)/sizeof(arr[0]));    Show(arr,sizeof(arr)/sizeof(arr[0]));    return 0;}

输出结果:32 2 65 2 2 2 2 2 2 65 2 2 8 33 11

原创粉丝点击