【經(jīng)典排序】之希爾排序

一.算法描述

* 先將整個(gè)待排序的記錄序列分割成為若干子序列分別進(jìn)行直接插入排序,具體算法描述:

* 選擇一個(gè)增量序列t1,t2,…,tk,其中ti>tj,tk=1;

* 按增量序列個(gè)數(shù)k,對(duì)序列進(jìn)行k 趟排序;

* 每趟排序,根據(jù)對(duì)應(yīng)的增量ti,將待排序列分割成若干長(zhǎng)度為m 的子序列,分別對(duì)各子表進(jìn)行直接插入排序。

* 僅增量因子為1 時(shí),整個(gè)序列作為一個(gè)表來處理,表長(zhǎng)度即為整個(gè)序列的長(zhǎng)度。

二.代碼實(shí)現(xiàn)


private static void shellSort(int[] nums) {

? ? ? ? int mid = (int) Math.floor(nums.length / 2);

? ? ? ? for (; mid > 0; mid = (int) Math.floor(mid / 2)) {

? ? ? ? ? ? for (int i = mid; i < nums.length; i++) {

? ? ? ? ? ? ? ? int j = i;

? ? ? ? ? ? ? ? int current = nums[i];

? ? ? ? ? ? ? ? while (j - mid >= 0 && current < nums[j - mid]) {

? ? ? ? ? ? ? ? ? ? nums[j] = nums[j - mid];

? ? ? ? ? ? ? ? ? ? j = j - mid;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? nums[j] = current;

? ? ? ? ? ? }

? ? ? ? }

? ? }


三.復(fù)雜度分析

時(shí)間復(fù)雜度:平均:O(n1.3)? 最壞:O(n2)? 最好:O(n)

空間復(fù)雜度:O(1)

穩(wěn)定性:不穩(wěn)定

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容