希尔排序
来源:互联网 发布:海信淘宝旗舰店 编辑:程序博客网 时间:2024/06/06 14:27
希尔排序的特点
希尔排序是对直接插入的一种优化
稳定性:不稳定
希尔排序的思想
将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序,最后选择增量为1,即使用直接插入排序,使最终数组成为有序。
希尔排序的代码
public string Shell(int[] a) { string shu = "排好序的数组:"; int n = a.Length-1; // gap为步长,每次减为原来的一半。 for (int gap = n / 2; gap > 0; gap /= 2) { for (int i = 1; i <=gap; i++) // 共gap个组,对每一组都执行直接插入排序 { for (int j = i + gap; j <= n; j += gap) //外循环 { int temp = a[j]; int position = j; for (int k = j - gap; k >= 1; k -= gap) //内循环 { if (temp < a[k]) { a[k + gap] = a[k]; position = k; } else { break; } } a[position] = temp; } } } for (int i = 1; i <a.Length ; i++) { shu = shu + " " + a[i].ToString(); } return shu; }
还可以这样写
public string Shell(int[] a) { string shu = "排好序的数组:"; int n = a.Length-1; // gap为步长,每次减为原来的一半。 for (int gap = n / 2; gap > 0; gap /= 2) { for (int i = 1; i <=gap; i++) // 共gap个组,对每一组都执行直接插入排序 { //平移法 // 如果a[j] < a[j-gap],则寻找a[j]位置,并将后面数据的位置都后移。 for (int j = i + gap; j <= n; j += gap) //外循环 { if (a[j] < a[j - gap]) { int tmp = a[j]; int k = j - gap; while (k >= 1 && a[k] > tmp) { a[k + gap] = a[k]; k -= gap; } a[k + gap] = tmp; } } } } for (int i = 1; i <a.Length ; i++) { shu = shu + " " + a[i].ToString(); } return shu; }
阅读全文
0 0
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 购物车全选,反选,结算
- android:Notification实现状态栏的通知
- 整理总结:JS DOM中对className的选择,添加和删除
- Linux Shell 基础(四)--sql
- HDU-1102 Constructing Roads(prim)
- 希尔排序
- 51nod 1096 距离之和最小 【思维题】
- 代理模式和装饰器模式的区别
- 贷款
- WEB接口测试之Jmeter接口测试自动化 (二)
- bzoj1026
- PYthon——plt.scatter各参数详解
- 算法之贪心书架
- [二分+最大流]51 Nod——1757 大灾变