快速排序

  快速排序是对冒泡排序的一种本质改进,它是不稳定排序。时间复杂度为O(nlogn)。

原理:

1.先从数列中取出一个数作为基准数。 
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 
3.再对左右区间重复第二步,直到各区间只有一个数。

例子:http://developer.51cto.com/art/201403/430986.htm(很清晰的例子)

代码实现:

void swap(int *arr, int i, int j)
{
	int temp = arr[i];
	arr[i] = arr[j];
	arr[j] = temp;
}
void quickSort(int* a, int left, int right)
{
	if (right <=left)
		return;
	int low = left;
	int height = right;
	int pivot = a[left];//基准数
	while (low!=height)
	{
                //从右边开始找小于pivot的数
		while (a[height] >= pivot && height > low)// (从右边先开始)
			height--;
               //从左边找大于pivot的数
		while (a[low] <= pivot && height > low)
			low++;
               //左右哨兵找到后,交换
		if (low < height)
			swap(a, low, height);
		
	}
         //左右哨兵相遇
	a[left] = a[height];
	a[height] = pivot;

	quickSort(a, left, low - 1);
	quickSort(a, low + 1, right);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值