C\C++快速排序算法

1.时间复杂度O(Nlog N)是冒泡排序的一种改进:比较次数相对减少,效率高。

     在内部排序中,快排是最好的方法之一。

2.基本思想:

    首先通过一趟排序把序列分割为两个部分;一个部分的数据比另一部分的小;然后分别对这两部分序列重复上述步骤,直至整个序列有序。

3.说明(明显的递归特性)

    1)假定待排序的序列为{ki|i from 1~n};

    2)从中任选一个km(基准元素),不大于km的至于其前,另外至于后,得到两个子序列(这是快排的一趟划分);

    3)子序列长度>1重复操作,直至每个子序列长度均为1;

4.基准元素选取原则:

    优化快速排序,基准元素的选取可以在首,尾,中间三者中选择中间值,然后放在首位,算法依旧即可。

5.快排代码(C\C++)

#include <iostream>
using namespace std;
#define size 10
void swap(int &a, int &b)
{
	if (a == b)
		return;
	else
	{
		a = a + b;
		b = a - b;//b=a了
		a = a - b;
	}
}
int getLocation(int *a,int low,int high)//si为分割的序列的位置
{

	int pos = a[low];//基准元素

	while (low < high)
	{
		while (low < high && a[high] <= pos)
			high--;		
		swap(a[low], a[high]);

		while (low < high && a[low] >= pos)
			low++;	
		swap(a[low], a[high]);
	
	}
	
	return low;

}
void quickSort(int *a, int low,int high)
{

	if (low < high)
	{
		int key = getLocation(a,low,high);
	//	cout << "key:" << key<<" a[k] "<<a[key] << endl;
		quickSort(a, low, key - 1);
		quickSort(a, key + 1, high);
	}
	
}

int main()
{
	int a[size];
	cout << "input ten integers:" << endl;
	for (int i = 0; i < size; i++)
		cin >> a[i];
		
	
	quickSort(a,0,size-1);

	cout << "\n排序后:" << endl;
	for (int i = 0; i < size; i++)
	{
		cout << a[i] << endl;
	}

	system("pause");

}

猜你喜欢

转载自blog.csdn.net/qq_22227123/article/details/80801538
今日推荐