希尔排序

来源:互联网 发布:社交网络 评论音轨 编辑:程序博客网 时间:2024/06/07 09:29
/**希尔排序:*    选取一个小于n的整数d作为第一个增量,把序列分为d组,即所有相互之间距离为d整数倍的*    元素为同一组,在各组内进行直接插入排序;取第二个增量d2(d2<d),重复上面分组与排序的*    过程,直到di=1时,即所有元素放在同一组中进行直接插入排序。*/#include <stdio.h>void shell_sort(int *arr,int n){int i,j,d;int temp;d=n/2;   //设置增量初值while(d>0){for(i=d;i<n;i++)//对所有相隔为d的元素进行直接插入排序{temp=arr[i];j=i-d;while(j>=0 && temp>arr[j])//对每组中的数据进行排序{arr[j+d]=arr[j];j=j-d;}arr[j+d]=temp;}d=d/2;}}int main(int argc,char **args){int arr[]={10,9,88,23,45,9};int i=0;shell_sort(arr,6);for(i=0;i<6;i++){printf("%d  ",arr[i]);}printf("\n");return 0;}