手敲快排,快速排序

來源:互聯網
上載者:User

我是看了這個
以後瞭解快排的,一邊看,一邊自己撕了8張紙頭類比。

快排想法還比較簡單,直接拉了嚴蔚敏的代碼。

對於快速排序的種種最佳化,希望高手能夠指點。

待到幾個最常見的排序演算法上齊了,一定將最佳化技巧奉上。

 /*<br />快速排序基礎版本<br />未作最佳化,很多時候原數組是有序的,此時(也是最壞情況)時間複雜度到O(n^2),並且棧的深度也到O(n)。<br />一個比較省力又效果顯著的最佳化是每次選擇區間段中間的數來分割,進而分治排序。<br />《資料結構》P277中提到的降低棧深度的方法不甚理解,望高手指點。<br />*/<br />#include <stdio.h></p><p>typedef int Data;<br />const int MaxN = 101;<br />Data arr[MaxN];</p><p>bool bigger(Data a , Data b)<br />{<br />return a >= b;<br />}</p><p>int Partition(Data *a , int low , int high , bool (*cmp)(Data,Data))<br />{<br />Data pivot = a[low];<br />while (low < high){<br />while (low < high && cmp(a[high] , pivot)) high --;<br />a[low] = a[high];<br />while (low < high && cmp(pivot , a[low])) low ++;<br />a[high] = a[low];<br />}<br />a[low] = pivot;<br />return low;<br />}</p><p>void Quicksort(Data *a , int low , int high , bool (*cmp)(Data,Data))<br />{<br />if (low >= high)return;<br />int pivot = Partition(a , low , high , cmp);<br />Quicksort(a , low , pivot - 1 , cmp);<br />Quicksort(a , pivot + 1, high , cmp);<br />}</p><p>void __test()<br />{<br />int n , i;<br />scanf("%d" , &n);<br />for (i = 0;i < n;i ++){<br />scanf("%d" , &arr[i]);<br />}<br />Quicksort(arr , 0 , n - 1 , &bigger);<br />puts("快排後的序列:");<br />for (i = 0;i < n;i ++){<br />printf("%d " , arr[i]);<br />}<br />puts("");<br />}<br />int main()<br />{<br />__test();<br />}<br />/*<br />9<br />3 2 3 77 8 999 10 4 3<br />10<br />7 8 77 8 6 4 3 3 2 33<br />*/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.