ds排序 希爾排序 排序 快速排序

2021-10-17 09:13:23 字數 1108 閱讀 6693

相信我們在沒接觸過排序知識之前,一定會覺得快速排序非常具有魅力,不因別的單純快排這個名字就讓人不明覺厲,但是了解乙個演算法不應該只知道code,了解思想,應用非常重要。

我先問出我心中非常好奇的問題:

快排為啥叫快排,快排是所有排序裡面效能最好的嗎?快排適合什麼情況呢,還是無論什麼情況下快排總是最好的(顯然× ?快排演算法的思想是什麼?其效能優良的原因是依賴於演算法中的哪個部分?

首先回答前兩個問題:

快排的效能在所有排序演算法裡面是最好的,資料規模越大快速排序的效能越優。快排在極端情況下會退化成

假如在提前得知處理資料可能會出現極端情況的前提下,可以選擇使用較為穩定的歸併排序。

下面回答第三個問題:

一次快排過程

顯然,我們從圖中可以看出快排運用了二分的思想,首先選擇乙個基準,定義左右兩端指標,先從左到右進行掃瞄直到,r[hi] < temp,將r[hi]移動至lo所在位置

總結下來**, 自己懶得敲了:

void quicksort(r, int lo, int hi)

}

現在回答一下,為什麼快速排序是平均效能最好的排序演算法,其優渥之處體現在哪?因此,我們可以了解到,快速排序的優越性體現在他沒有多餘的比較上,對於初學者,我們可以較為簡單的認為,快排所需要的指令數會比較少。

演算法分析

最差情況是,每次我們在劃分時,所取的基準總是陣列中最小的,因此我們總共會進行

最好的情況是,每次所取的基準就是該陣列的中點,因此一共需要進行n次劃分,對於 長度為

用遞迴算(下次補。。。):

隨機進行切割,最好算出複雜度還是

void quicksort(int r, int lo, int hi)

r[i] = temp;

quicksort(r, lo, i - 1);

quicksort(r, i + 1, hi);}}

DS排序 希爾排序

題目ds排序 希爾排序 題目描述 給出乙個資料序列,使用希爾排序演算法進行降序排序。間隔gap使用序列長度迴圈除2直到1 輸入第一行輸入t,表示有t個測試示例 第二行輸入n,表示第乙個示例有n個資料 n 1 第三行輸入n個資料,都是正整數,資料之間用空格隔開 以此類推 輸出對每組測試資料,輸出每趟排...

DS排序 快速排序

給出乙個資料序列,使用快速排序演算法進行從小到大的排序 第一行輸入 t,表示有 t個測試示例 第二行輸入 n,表示第乙個示例有 n個資料 第三行輸入 n個資料,都是正整數,資料之間用空格隔開 以此類推 每組測試資料,輸出每趟快排的結果,即每次排好乙個數字結果 長度為 1的子串行,不用排,不用輸出 不...

DS排序 快速排序

給出乙個資料序列,使用快速排序演算法進行從小到大的排序 第一行輸入t,表示有t個測試示例 第二行輸入n,表示第乙個示例有n個資料 第三行輸入n個資料,都是正整數,資料之間用空格隔開 以此類推 每組測試資料,輸出每趟快排的結果,即每次排好乙個數字結果 長度為1的子串行,不用排,不用輸出 不同測試資料間...