您的位置:首页 > 运维架构 > Shell

排序 —— 希尔排序(Shell sort)

2016-10-04 10:56 344 查看
希尔排序(Shell sort)的名称源于它的发明者 Donald Shell,该算法是冲破二次时间屏障(冒泡和插入排序,基于相邻元素的交换)的第一批算法。希尔排序改进了冒泡和插入排序的相邻元素才进行交换,而是比较相距一段距离的元素来工作,各趟比较所用的距离随着算法的进行而减少,直到只比较相邻元素的最后一趟排序为止。正是因为这样的工作机制,希尔排序有时也称为缩小增量排序(diminishing increment sort)

typedef int ElementType;

void ShellSort (ElementType A[], int N) {

int Increment, i, j;
ElementType Tmp;

for (Increment = N/2; Increment >= 0; Increment /= 2) {

for (i = Increment; i < N; ++i) {
Tmp = A[i];
for (j = i; j >= Increment; j -= Increment) {
if (Tmp < A[j-Increment])
A[j] = A[j-Increment];
else break;
// 尤其注意这里的 break;
}
A[j] = Tmp;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息