新手講排序 詳細講解快速排序

2022-08-05 07:39:20 字數 779 閱讀 6366

quick_sort(int a,int start,int end);

int   i=start ,  j=end  ,  pivot;

一.  先選擇乙個基準pivot,3種選擇方式

1.固定位置,開頭或結尾或中間

2.隨機位置,採用隨機數產生start和end之間的數

3.平衡位置,即從開頭結尾中間三個數中選擇他們的中間數,達到平衡的目的

二. 通過比較與該基準的關係,將原陣列分為元素個數比較接近的兩個陣列,

1.while(iwhile(a[i]while(a[j]>pivot)   j--;           //這個從後往前找,找到小於基準的數

swap(a[i],a[j]);                   //交換兩個數

三.接下來對兩個子陣列分別進行快排

if(i < end )     quick_sort(a,i,end);      //因為從上面的步驟,i 之前的都是小於基準的數

if(j > start)     quick_sort(a,start,j);    //同理

四.  上面遞迴進行到一定程度的時候,將不會再滿足i start 條件,這時候快排完成,遞迴完畢

平均時間複雜度o(nlogn);

最壞時間複雜度o(n^n) ; 此時因為選取的基準不好,每一次都分成兩個個數相差很多甚至乙個為空的陣列

漸進複雜度: o(nlogn);

它是不穩定的排序演算法,因為快速排序可能會改變相等的兩個數之間的相對位置,如

排序之後第乙個2便到了第二個2的後面

快速排序詳細講解

五種常見排序就是 冒泡 插入 選擇 快速排序 歸併排序 排序和查詢的關係 排序是查詢的前提 排序是重點 在這裡,快速排序,顧名思義,排序速度較快,但是較為複雜,但是遞迴這個思想,說簡單但是也有些繞,說難也就幾行 的問題。先確定無序陣列裡的某乙個元素在有序裡的位置,這樣就把陣列分成兩半無序陣列 每一半...

新手講排序 歸併排序

歸併排序給我的感覺 程式設計一定要認真,不然就算你能想通也要糾纏你很長時間 1 本質 1.分解 用二分法,每次將陣列分成兩個元素數量相同或者差乙個 奇數 的子陣列,然後遞迴直到將子陣列分成乙個乙個的元素,實際陣列不用分,你直接將它看成已經分好的元素 2.合併 將len 1的陣列合併成len 2的陣列...

快速排序講解

高快省的排序演算法 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它...