数据结构--排序算法--快速排序

思路:选择数组第一个元素,是的数组中小于等于其的数放在这个数的左边,大于其的数放在右边,左右两边分别调用递归排序,则最后都有序。
首先将划分值放在数组最后,建立一个小于等于区间,初始长度为0,从左往右遍历数组,当前值大于划分值时,继续遍历,当前值小于划分值时,将当前值与小于等于区间后的数调换位置,并将小于等于区间向右扩一个位置,当遍历到最后一个元素,将划分值与小于等于区间后第一个值对换,即完成一次排序。
int partition(int * A, int left, int right)
{
	int i= left,j= right;
	int x = A[left];
	while (i < j)
	{
		while (i <j && A[j]>x)
			--j;
		if (i < j)
			A[i++] = A[j];
		while (i <j&&A[i] < x)
			++i;
		if (i < j)
			A[j--] = A[i];
	}
	A[i] = x;
	return i;
}
void qsort(int * A, int left, int right)//递归将关键字两边分成有序的数组
{
	if (left < right)
	{
		int p1 = partition(A, left, right);
		qsort(A, left, p1 - 1);
		qsort(A, p1 + 1, right);
	}
}
int* quickSort(int* A, int n) {
	qsort(A, 0, n - 1);
	return A;
}
void main() 
{
      for (int i = 0; i < n; i++)
	{
		cout << A[i] << endl;
	}
       quickSort(A, n);
	cout << "快速排序后的结果为: " << endl;
	for (int i = 0; i < n; i++)
	{
		cout << A[i] << endl;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值