快速排序中的partition函式詳解

2021-07-01 19:33:23 字數 805 閱讀 2853

快速排序的精髓就在partition函式的實現。我們構建兩個指標,將陣列分為三部分,黑色部分全部小於pivot,中間藍色部分都大於pivot,後面紅色部分未知。i指標遍歷整個陣列,只要它指向的元素小於pivot就交換兩個指標指向的元素,然後遞增。

// arr為陣列,start、end分別為陣列第乙個元素和最後乙個元素的索引

// povitindex為陣列中任意選中的數的索引

intpartition(int arr, int start, int end, int pivotindex)

}swap(arr[storeindex], arr[end]);

return storeindex;

}

兩次swap是為了將pivot先暫存在最後乙個位置,在完成一次partition之後將pivot還原至storeindex所指的位置。因為它之前的元素都小於它,之後的都大於它。

如果沒有這兩次swap,那麼storeindex將指向大於等於pivot的元素,並不能保證它之後的元素都大於pivot(能保證之前的都是小於的)。storeindex位置的元素一旦固定直至程式結束將不會再改變,因此需要使用兩次交換暫存pivot元素。

快速排序演算法裡的partition函式

快速排序演算法裡的partition函式用來解決這樣乙個問題 給定乙個陣列arr和陣列中任意乙個元素a,重排陣列使得a左邊都小於它,右邊都不小於它。實現 arr為陣列,start end分別為陣列第乙個元素和最後乙個元素的索引 povitindex為陣列中任意選中的數的索引 int partitio...

Partition函式實現的快速排序演算法

被傳值傳引用的問題還有一些雜事困擾了一下午,現在終於可以靜下心來寫部落格了。這個partition函式是我在 劍指offer 那本書上看到的,其實對應於快排是乙個單項掃瞄。這個函式在很多演算法題上都有應用,主要原理就是選定乙個參考值,然後將資料分成兩部分,左邊都是比它小的,右邊都是比它大的。然後把中...

快速排序 一次遍歷partition的實現

一種partition的實現如下 1 private int partition int array,int left,int right 14 1516 int tem array i 1 17 array i 1 array right 18 array right tem 1920 retur...