奇偶交換排序法最壞情況複雜度的證明

2021-10-05 12:53:04 字數 823 閱讀 5489

奇偶排序法的思路是在陣列中重複兩趟掃瞄。第一趟掃瞄選擇所有的資料項對,a[j]和a[j+1],j是奇數(j=1, 3, 5……)。如果它們的關鍵字的值次序顛倒,就交換它們。第二趟掃瞄對所有的偶數資料項進行同樣的操作(j=2, 4,6……)。重複進行這樣兩趟的排序直到陣列全部有序。而最壞情況為將乙個逆序數列正序排序。

建議在證明的時候,自己先手動模擬一遍,看一下其中的規律會更加好懂。以下證明中"[ ]"意為向下取整。

1.結束條件:連續兩次沒有交換操作,證明序列已經有序

2.奇數趟比較次數:[n/2],偶數趟比較次數:[(n-1)/2]

當n為偶數時:[n/2] + [(n-1)/2] = n/2 + (n-2)/2 = n-1

當n為奇數時:[n/2] + [(n-1)/2] = (n-1)/2 + (n-1)/2 = n-1

所以每兩趟的比較次數為:n-1

當逆序時,對於每乙個a[k] (1 <= k <= n),最開始會出現兩種情況。

實際上,當a[k]在首位或最後一位時(在交換過程中,a[k]總會被移到一次首位或最後一位),因為在這個時候必然會有一次對奇(偶)數的位置進行排序的趟,所以會出現一次正好a[k]不被比較的情況,即有一趟比較a[k]被閒置了。所以要讓a[k]回到正序位置會多出這一趟,總共要n趟。

當n為偶數時:n/2*(n-1)=n(n-1)/2

當n為奇數時:(n-1)/2*(n-1)+ [n/2] = n(n-1)/2

所以序列變為正序一共需要n(n-1)/2次比較。注意還有兩趟共(n-1)次比較檢驗是否排序完成。所以排序完成的總比較次數為:(n-1)(n+2)/2次

如何從最壞 平均 最好的情況分析複雜度?

你好,我是彤哥,乙個每天爬二十六層樓還不忘讀原始碼的硬核男人。上一節,我們從事後統計法過渡到漸近分析法,詳細講解了如何進行演算法的複雜度分析。但是,如果遵循嚴格的漸近分析法,需要掌握大量數學知識,這無疑給我們評估演算法的優劣帶來了很大的挑戰。那麼,有沒有更好地評估演算法的方法呢?答案是必然的,本節,...

排序的最好和最壞的時間複雜度問題

排序時間複雜度問題 面試時被問到氣泡排序,選擇排序和快速排序的時間複雜度問題,由於自己基礎不紮實,當場懵逼,這件事一直讓我反思了好幾天。可能你會正確地寫出這幾種排序,可能你會背過別人給你說的時間複雜度。我也是這樣。先說氣泡排序 氣泡排序不管序列是怎樣,都是要比較n n 1 2 次的,o n2 而對於...

關於演算法複雜度的分析與演算法奇偶交換

首先,尋找演算法複雜度有三步 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。計算基本語句的執行次數的數量級 只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化...