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;
}

 

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