C++ 快速排序,排序方法的比较

基本快速排序方法

void quickSort(int num[], int length)
{
	qSort(num, 0, length - 1);
}
void qSort(int num[], int low, int high)
{
	if(low < high)
	{
		int pivot = partition(num, low, high);
		qSort(num, low, pivot - 1);
		qSort(num, pivot + 1, high);
	}
}
int partition(int num[], int low, int high)
{
	int temp = num[low];
	while(low < high)
	{
		while(low < high && num[high] >= temp)
			hith--;
		swap(num, low, high);
		while(low < high && num[low] <= temp)
			low++;
		swap(num, low, high);
	}
	return low;
}

快速排序方法的优化:

  1. 比较值pivot的优化 ,三数取中法,取三个关键字先进行排序,将中间数作为比较值pivo;
  2. 递归的优化,进行尾递归优化,采用迭代而不是递归,可以缩减堆栈深度,提高整体性能
  3. 不必要的交换,少了对此交换数据的操作,在性能上有了部分提高
  4. 小数组的选择,使用插入排序

递归的优化
void qSort(int num[], int low, int high)
{
	int pivot;
	while(low < high)
	{
		pivot = partition(num, low, high);
		qSort(num, low, pivot - 1);
		low = pivot + 1;
	}
}
不必要的交换-少了对此交换数据的操作,在性能上有了部分提高
int partition(int num[], int low, int high)
{
	int temp = a[low];
	while(low < high)
	{
		while(low < high && num[high] >= temp)
			high--;
		num[low] = num[high];
		while(low < high && num[low] <= temp)
			low++;
		num[high] = num[low];
	}
	num[low] = temp;
	return low;
}
小数组的选择-使用插入排序
void qSort(int num[], int low, int high)
{
	int pivot;
	if((high - low) > MAX_LENGTH_INSERT_SORT)
	{
		while(low < high)
		{
			pivot = partition(num, low, high);
			qSort(num, low, pivot - 1);
			low = pivot + 1;
		}
	}
	else
		InsertSort(num);
}

排序方法比较:


猜你喜欢

转载自blog.csdn.net/shidamowang/article/details/80425698
今日推荐