快速排序演算法實現

2021-06-17 16:29:18 字數 1246 閱讀 9978

快速排序法的時間複雜度是o(nlog2n)

快速排序使用分割法對表進行排序。演算法給出乙個中心值,用它將表分為兩部分。快速排序在陣列內將元素分為若干部分。下面是乙個具體的例子。

(注意:寫**的時候要確定高、低索引,中間索引)

假設陣列a中含有10個整數值:

a=800,150,300,600,550,650,400,350,450,700

索引從0到9,所以中間索引為4,對應值為550,

第一步將550與a[0]交換位置,變成550,150,300,600,800,650,400,350,450,700;

第二步從a[1]開始往中間進行搜尋,如果搜尋到大於550的數值就停止,此時開始從a[9]往中間開始搜尋,如果發現小於550的數值就停止,然後交換這兩個值,即由550,150,300,600,800,650,400,350,450,700變成550,150,300,450,800,650,400,350,600,700;以此類推550,150,300,450,350,650,400,800,600,700;550,150,300,450,350,400,650,800,600,700;然後將a[0]與400交換位置400,150,300,450,350,550,650,800,600,700;至此,以550為分界點,左邊子表都是小於550的,右邊都是大於550,然後利用遞迴思想將這兩個邊再利用快速排序實現。

template

void quicksort(t a,int low,int high)

//取中心索引並將其值賦給pivot

mid=(low+high)/2;

pivot=a[mid];

//交換pivot及低端元素的值並初始化掃瞄索引

swap(a[mid],a[low]);

scanup=low+1;

scandown=high;

//定位錯位元素,並設定結束條件

do  while(scanup//將pivot拷貝到scandown位置,分開連個子表

a[low]=a[scandown];

a[scandown]=pivot;

//若低端子表有兩個或更多元素,則進行遞迴呼叫

if(low

quicksort(a,low,scandown-1);

//若高階子表有兩個或更多元素,則進行遞迴呼叫

if(scandown+1

quicksort(a,scandown+1,high);

}

快速排序演算法實現

快速排序演算法的原理 將數列中任取乙個數,將其左部放置比其小的數,其右部放置比其大的數。然後,對其左,右部遞迴執行這種分割過程。原始碼如下 int32 sorteddata int32 quicksort int32 sortdata,dword sortdatalen assert sortdat...

快速排序演算法實現

學完了快速排序演算法,感覺挺容易的,所以趁著有點時間就寫了個實現程式。採用了介面和實現分離的原則 qsort.h inte ce of the quick sort define num 2000 設定最多個數為1999個 class qsort qsort.cpp include qsort.h ...

快速排序演算法實現

本程式是對快速排序演算法的實現,一次while 1 都將要比較的元素存入flag中,依次將比flag小的元素放在左邊,比flag大的元素放在右邊,然後用遞迴的方法,將flag左右兩邊的元素分別快速排序操作。本程式為了方便測試,所以使用者只要輸入元素個數,程式就會隨機生成相應元素個數的陣列,並自動對其...