希尔排序(shell sort)
2017-08-11 21:42
274 查看
希尔排序(改进的插入排序):
希尔排序属于插入类排序,是将整个有序序列分割成若干小的子序列分别进行插入排序。
排序过程:先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止。
但是: 希尔排序会改变相同元素的原先相对位置, 也就是说希尔排序是不稳定的。
原理: 通过较大的间距抽取元素进行排序,有效的减少逆序对 从而提高排序效率。
实现:
d 选取好坏会影响排序的效果 这里是d/2(并非好的选择)
改进的希尔排序:(使用Sedgewick增量序列)
void shell_sort(int a[], int n)
{
int i, j, d;
int tmp;
int Si;
int Sedgewick[] = {929, 505, 209, 109, 41, 19, 5, 1, 0};
for(Si = 0; Sedgewick[Si] >= n; Si++ )//最大增量需要小于数组大小
for(d = Sedgewick[Si]; d > 0; d = Sedgewick[++Si]){ //最后 d 为 1
for(i = d; i < n; i++ ){
tmp = a[i];
for(j = i; j >= d && a[j-d] > tmp; j -= d){
a[j] = a[j-d];
}
a[j] = tmp;
}
}
}
改进后的希尔排序 时间复杂度 平均可以为 O(N^(7/6))
希尔排序属于插入类排序,是将整个有序序列分割成若干小的子序列分别进行插入排序。
排序过程:先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止。
但是: 希尔排序会改变相同元素的原先相对位置, 也就是说希尔排序是不稳定的。
原理: 通过较大的间距抽取元素进行排序,有效的减少逆序对 从而提高排序效率。
实现:
d 选取好坏会影响排序的效果 这里是d/2(并非好的选择)
void shell_sort(int a[], int n) { int i, j, d; int tmp; for(d = n/2; d > 0; d /= 2){ //最后 d 为 1 for(i = d; i < n; i++ ){//从d开始往后依此排 与当前元素相差d整数倍距离的元素 tmp = a[i]; for(j = i; j >= d && a[j-d] > tmp; j -= d){ a[j] = a[j-d]; } a[j] = tmp; } } }
改进的希尔排序:(使用Sedgewick增量序列)
void shell_sort(int a[], int n)
{
int i, j, d;
int tmp;
int Si;
int Sedgewick[] = {929, 505, 209, 109, 41, 19, 5, 1, 0};
for(Si = 0; Sedgewick[Si] >= n; Si++ )//最大增量需要小于数组大小
for(d = Sedgewick[Si]; d > 0; d = Sedgewick[++Si]){ //最后 d 为 1
for(i = d; i < n; i++ ){
tmp = a[i];
for(j = i; j >= d && a[j-d] > tmp; j -= d){
a[j] = a[j-d];
}
a[j] = tmp;
}
}
}
改进后的希尔排序 时间复杂度 平均可以为 O(N^(7/6))
相关文章推荐
- 希尔排序(Shell_Sort)
- 希尔排序(shell sort):c++
- 希尔排序(Shell Sort)——插入排序法(Java实现)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- [排序] 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 2、希尔排序(Shell`s Sort)
- Aizu ALDS1_2_D Shell Sort(希尔排序)
- 用python实现希尔排序(shell_sort)
- 算法----希尔排序(shell sort)
- 排序之希尔排序(Shell Sort)
- 希尔排序(shell sort)
- 排序算法--希尔排序(Shell Sort)_C#程序实现
- 用java 和 python将希尔排序Shell's Sort 的每一步打印出来(每次的增量没有固定规则)
- 【排序算法 】希尔排序 shell sort(插入类排序)
- 排序算法之希尔排序(ShellSort)
- 希尔排序(shellsort)
- 常见排序算法 - 希尔排序 (Shell Sort)
- 排序算法——希尔排序(Shell Sort)