快速排序(遞迴,歸併)

2021-10-03 02:20:07 字數 746 閱讀 7901

#include using namespace std;

const int n=1e5;

int q[n],n; //待排序陣列

int main()

1、任意選擇乙個至作為中間值,將比中間值大的放在右邊,小的放在左邊,中間值可以是待排序陣列中的任意乙個數,這裡取q[(l+r)/2]。

2、分別用兩個指標i,j指向陣列的首位,向中間值移動,如果去q[i]=r) return;

int i=l-1,j=r+1; //因為do-while迴圈要先制行++

int x=q[l+r>>1];

while(ix);

if(i不穩定排序

1、假設當前陣列可拆分成兩個已經按大小排好的陣列,取兩個指標i,j分別指向兩陣列的左端,比較q[i]和q[j],將較小的存入新陣列,排序結束後再複製回原陣列。

2、中間值可以是待排序陣列中的任意乙個數,這裡取q[(l+r)/2]。

3、依然用遞迴。

int tmp[n];

void merge_sort(int q,int l,int r)

{ if(l>=r) return ;

int mid=l+r>>1;

merge_sort(q,l,mid),merge_sort(q,mid+1,r);

int k=0,i=l,j=mid+1;

while(i<=mid&&j<=r)

if(q[i]穩定排序

遞迴 快速排序與歸併排序

includeint a 101 n 定義全域性變數,將在子函式中呼叫 void quicksort int left,int right 最終將基數歸位 基數歸中 a left a i 將i,j相遇時的那個值作為下次遞迴呼叫的基!每個進行遞迴呼叫可以確定乙個基數字置 將基數擺到正確位置 a i t...

歸併,快速排序

歸併排序 實現思想 歸併的含義很明顯就是將兩個或者兩個以上的有序表組合成乙個新的有序表。歸併排序中一般所用到的是2 路歸併排序,即將含有n個元素的序列看成是n個有序的子串行,每個子串行的長度為1,而後兩兩合併,得到n 2個長度為2或1的有序子串行,再進行兩兩合併。直到最後由兩個有序的子串行合併成為乙...

遞迴 快速排序 快速排序

問題描述 用遞迴來實現快速排序 quick sort 演算法。快速排序演算法的基本思路是 假設要對乙個陣列a進行排序,且a 0 x。首先對陣列中的元素進行調整,使x放在正確的位置上。同時,所有比x小的數都位於它的左邊,所有比x大的數都位於它的右邊。然後對於左 右兩段區域,遞迴地呼叫快速排序演算法來進...