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

03_希尔排序(ShellSort)

2017-05-17 19:45 489 查看
希尔排序算法思路:

希尔排序是插入排序的增强版,如果没看过插入排序,请先查看插入排序算法的思路。

希尔排序按照增量d依次将数组分组排序,增量的选取可以自己决定,现在还没统一的规定多少是最合适的,但是增量的最后必须是d=1。

例如:有个a[10]的数组,增量可以选取d=len , d=d/3+1 (4,2,1);每个增量d都可以将数组分成d组。然后,每个组再进行排序,这样经过一轮增量d分组排序后,d个组都排好序。按照这样进行,直至d=1。

void wei::Chen::showArr(int arr[], int len) {
for (int i = 0; i < len; ++i ) {
cout << arr[i] << "  ";
}
cout << endl;
}
void wei::Chen::shellSort(int arr[], int len) {
int gap = len ;
int k;
int temp;
do {
gap = gap/ 3 + 1;
cout << gap << endl;
/*分gap组*/
for (int k = 0; k < gap; ++k ) {
/*每组进行单独排序*/
for (int i = k+gap; i < len; i += gap) {
k = i;
temp = arr[k];
for (int j = i - gap; (j >= 0) && (temp<arr[j]); j -= gap) {
arr[j + gap] = arr[j];
k = j;
}
arr[k] = temp;
}
}
cout << gap << endl;
}while( gap>1 ) ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: