数据结构和算法基础之希尔排序
/// <summary> /// 希尔排序 /// 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序 /// 排序过程:先取一个正整数d1<n, /// 把所有序号相隔d1的数组元素放一组,组内进行直接插入排序; /// 然后取d2<d1, /// 重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止 /// </summary> /// <param name="arry"></param> public static void ShellSort(int[] arry) { int gap = arry.Length / 2; while(gap>=1) { //把距离为gap编成一组在对这个组进行插入排序 for (int i = gap; i < arry.Length-1; i++) { int tmp = arry[i]; int j = 0; //取出距离为gap的数 for (j = i-gap; j >=0&&tmp<arry[j]; j=j-gap) { arry[j + gap] = arry[j]; } arry[j + gap] = tmp; } gap = gap / 2; } }
时间复杂度:n^1.3