/// <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數組