您的位置:首页 > 其它

排序算法:希尔排序

2015-09-02 15:12 375 查看
摘要:排序算法有很多,最简单的有冒泡排序和插入排序,这两种方法都具有O(N^2)的时间界.我们想要讨论的是具有更好的时间界的排序算法,比如希尔排序.

(1)希尔排序的思路是通过比较一定间距的元素来进行排序,最后再对所有相邻元素进行一次插入排序.

(2)希尔排序最重要的参数是增量序列(h1,h2,…..ht),只要h1 = 1,那么增量序列可以任意选择.但是不同的增量序列可能会有较大的性能差异;我们选择的一种序列是ht = [N/2],hk = [hk+1/2];

代码如下:

void Shellsort(int *A,int N)
{
int i,j,Increment,tmp;
for ( Increment = N/2;Increment >= 1; Increment /= 2)
{
//确定增量
for( i = Increment;i<=N-1;i++)
{
//进行插入排序,A[i]遍历所有以Increment为间距的子分组的元素
tmp = A[i];
for ( j = i;j>=Increment;j -= Increment)
{
//进行一次插入,确定A[i]需插入的位置(前面的元素一定保证有序插入才有效)
if (A[j] < A[j-Increment])
A[j] = A[j - Increment];//往后移动
else
break;
}
A[j] = tmp;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息