演算法導論學習筆記 一 排序演算法之快速排序

2021-07-10 08:34:30 字數 990 閱讀 6566

快速排序演算法用到了分治的思想,將大陣列分為兩個小陣列,且使得乙個小陣列均比某個數小,而另乙個小陣列均比這個數大,然後將這兩個小陣列繼續劃分,直至不可再分。

partition(a,p,r)

1 x = a[r]

2 i = p - 1

3 for j = p to r-1

4 if a[j] <= x

5 i = i + 1

6 exchange a[i] with a[j]

7 exchange a[i+1] with a[r]

8 return i + 1

j為當前被排序數的下標,i指向最後乙個比標準數小的數;

即在前j-p個數中,有p-i-1個數比標準數小。

當某個數比標準數小時,與a[i]交換,則將大數置後,而將小數置前;

最後因為a[i]

快速排序在最好情況下,時間複雜度為o(n lg n),而在最壞情況下,時間複雜度為o(n•n),但是其期望時間複雜度為o(n lg n)。雖然快速排序在一定情況下比分治排序滿,但它有乙個優點:快速排序為原址排序。當記憶體不夠用的時候,快速排序仍可以穩定的執行;而分治排序需要申請更多的記憶體空間,才能穩定執行。

void exchange(int *x,int *y)

}int partition(int *sortarray,int left,int right)

}exchange(&sortarray[i+1],&sortarray[right]);

return i+1;

}void quicksort(int *sortarray,int left,int right)

}

演算法(一)排序

一 o n 2 的排序演算法 1.選擇排序 selection sort 先找到最小的 public static void selectsort int arr 2.氣泡排序 bubble sort 先找到最大的 public static void bubblesort int arr 3.插入...

演算法學習(一) 排序演算法

參考 排序 氣泡排序是一種很簡單也很常見的排序演算法,我們在初學程式語言,尤其是初學陣列的時候,應該都了解過氣泡排序,下面就當複習吧。public static void pubblesprt int array,int left,int right 氣泡排序 從陣列下標left開始,依次比較相鄰兩...

演算法(一) 排序sorting

問題 輸入數字a1,a2,a3.an,使其公升序輸出。1 插入排序 insertion sort 演算法 這個演算法從陣列的第二個元素開始迴圈,將選中的元素與之前的元素一一比較,如果選中的元素小於之前的元素,則將之前的元素後移,最後再將選中的元素放在合適的位置。在這個演算法執行的過程中,總是保持著索...