C 實現快速排序演算法

2021-07-05 08:49:19 字數 1649 閱讀 2670

快速排序採用的是分治法,其平均時間複雜度為o(nlogn)

一趟快速排序的演算法是[1]:

1)設定兩個變數i、j,排序開始的時候:i=0,j=n-1;

2)以第乙個陣列元素作為關鍵資料,賦值給

key,即 

key=a[0];

3)從j開始向前搜尋,即由後開始向前搜尋(j=j-1即j--),找到第乙個小於

key的值a[j],a[j]與a[i]交換;

4)從i開始向後搜尋,即由前開始向後搜尋(i=i+1即i++),找到第乙個大於

key的a[i],a[i]與a[j]交換;

5)重複第3、4、5步,直到 i=j; (3,4步是在程式中沒找到時候j=j-1,i=i+1,直至找到為止。找到並交換的時候i, j指標位置不變。另外當i=j這過程一定正好是i+或j-完成的最後另迴圈結束。)

下面的**用了兩種不同的演算法實現快速排序演算法,第一種是上面提到的快排演算法,第二種是演算法導論上的版本。

//#include "stdafx.h"

#include using namespace std;

//快速排序演算法

template void quicksort(t*, int, int);

//快排另一種演算法

template int partition(t*, int, int, int);

template void quicsortsec(t*, int, int, int);

template void swap(t&, t&);

int _tmain(int argc, _tchar* argv)

; int length = sizeof(arr) / sizeof(int);

cout << "before quick sort:" << endl;

for (int i = 0; i < length;i++)

cout << endl;

//quicksort(arr, 0, length - 1);

quicsortsec(arr, length, 0, length - 1);

cout << "after quick sort:" << endl;

for (int i = 0; i < length;i++)

cout << endl;

return 0;

}template void quicksort(t* a, int left, int right)

while (i < j && a[i] < key)

++i;

if (i < j)

}a[i] = key;

//遞迴呼叫

quicksort(a, left, i - 1);

quicksort(a, i + 1, right); }}

template void quicsortsec(t* a, int legth, int left, int right)

template int partition(t* a, int legth, int left, int right)

} }++small;

swap(a[small], a[right]);

return small;

}template void swap(t &a, t &b)

快速排序演算法 c 實現

namespace backpackproblem backpack bp new backpack profit int start 0 int end profit.length 1 bp.quicksort profit,start,end bp.print class backpack 快速...

快速排序演算法C 實現

經常看到有人在網上發快速排序的演算法,通常情況下這些人是在準備找工作,或者看 演算法導論 這本書,而在他們發布的 通常是差不多的版本,估計也是網上 copy 一下,自己改改,跑過了就算了,但是通常這樣玩根本沒有太大作用,如果到一家公司,給你一台不能上網的筆記本,20分鐘,你是根本寫不出來快速排序的演...

快速排序演算法C 實現

quick sort stl中也有現成的快速排序演算法,內部實現採用了以下技巧 1 樞軸的選擇採取三數取中的方式 2 後半段採取迴圈的方式實現 3 快速排序與插入排序結合 include include includeusing namespace std 這一版本是最簡單實現版本,對於快速排序的優...