c++實現快速排序算法(遞歸)

快速排序是對冒泡排序的改進,是一種不穩定的排序算法,其時間複雜度是O(n),被認爲是目前最好的一種內部排序方法。

它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。——此處摘自百度百科。

Talk is cheap. Show me the code。關鍵是用一個基準值作爲比較對象。

void quick_sort(int a[], int low,int high)
{
	if (high < low)return;
	int i = low;
	int j = high + 1;
	int key = a[low];

	while (true)
	{
		//從左到右找比基準key大的值
		while (a[++i]<key)
		{
			if (i == high)
				break;
		}

		//從右向左找比基準key小的值
		while (a[--j]>key)
		{
			if (j == low)
				break;
		}
		if (i >= j) break;
		//交換i,j對應的值 不使用第三方變量
		a[j] = a[i] + a[j];
		a[i] = a[j] - a[i];
		a[j] = a[j] - a[i];
	}
	//中樞值與j對應值交換
	int temp = a[low];
	a[low] = a[j];
	a[j] = temp;

    //遞歸
	quick_sort(a, low, j - 1);
	quick_sort(a, j + 1, high);
}

int main()
{
	int arr[] = { 12, 11, 13, 5, 6, 7 };
	int len = sizeof(arr) / sizeof(int);
	//bubble_sort(arr, len);
	//selece_sort(arr, len);
	quick_sort(arr,0,len-1);
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl; 

	getchar();

	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章