1. 程式人生 > >快速排序演算法實現(C++)

快速排序演算法實現(C++)

快速排序採用的是分治法,其平均時間複雜度為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 <iostream>

using namespace std;

int a[] = {100,8,15 ,37,26,13,27,49,55,14};

void quick_sort(int a[], int left, int right)
{
	if(left<right)
	{
	int i = left;
	int j = right;
	int x = a[i];

	while(i<j)
	{
		while(i<j&&a[j]>x)
			j--;
		if(i<j){
			a[i] = a[j];
			i++;
		}
		while(i<j&&a[i]<x)
			i++;
		if(i<j){
		 a[j] = a[i];
		 j--;
		}
	}
	a[i] = x;
	quick_sort(a, left, i-1);
	quick_sort(a, i+1, right);
	}
}
int main()
{
	cout<<"Before sort: ";
	for(int i =0 ; i<10;i++)
		cout<<a[i]<<" ";
	cout<<endl;
	quick_sort(a, 0, 9);
	cout<<"After sort: ";
	for(int i =0 ; i<10;i++)
		cout<<a[i]<<" ";
	cout<<endl;
}
[1] 百度百科  http://baike.baidu.com/view/115472.htm