數據結構和算法基礎之希爾排序

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

相關文章
相關標籤/搜索