快速排序算法

快速排序使用分治法来把一个数组分为两个子数组。具体算法描述如下:

  • 从数列中挑出一个元素,称为 “基准”,可以选最左边的数;
  • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。该基准就处于数组的中间位置。
  • 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。

当基准数选择最左边的数字时,那么就应该先从右边开始搜索;当基准数选择最右边的数字时,那么就应该先从左边开始搜索。不论是从小到大排序还是从大到小排序!
具体代码如下:

void quickSort(int* arr,int left,int right)//快速排序,从小到大
{
	if(left>right)
	{
		return ;
	}
	int i=left;
	int j=right;
	int base=arr[left];//取最左边的数作为基准数

	while(i<j)
	{
		while (arr[j]>=base && i<j)//左边位边界时,先从右边开始遍历 ,找比base小的数
		{
			--j;
		}
		while (arr[i]<=base && i<j)//从左边开始遍历,找比base大的数
		{
			++i;
		}
		if(i<j)
		{
			swapVal(&arr[i], &arr[j]);
		}
	}

	arr[left]=arr[i];// arr[left] 和 arr[i]交换
	arr[i]=base;
	
	quickSort(arr,left,i-1);
	quickSort(arr,i+1,right);
	return ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值