C++ 实现快速排序

本文介绍了快速排序的基本步骤,包括使用qsort函数,计算数组长度的正确方式,归位函数中的细节处理,如选择中间值后如何调整左右指针,以及递归调用qsort进行子数组排序。给出的AC代码展示了完整的快速排序算法实现。
摘要由CSDN通过智能技术生成

标记一下写快排的细节和注意事项

1. 首先qsort和归位函数都需要int* ,left ,right 三个参数

2.求数组的个数,记得用sizeof nums/sizeof(int),否则会溢出

3.归位函数:如果选nums[left] 作为middle的值,则记得要先用右指针往左移。因为如果用左指针先往右,则有可能交换时,nums[ j ]的值是比middle要大的

4.归位函数,右指针往左移动时,nums[i]  nums[j] 的值交换后,i++ 。因为此时,交换完后i的位置是已经排序过的。

5. qsort函数中,找到mid后进行递归时,

qsort(nums, left, mid-1); qsort(nums, mid+1,right)

以下为AC代码

#include <iostream>
#include<cmath>
#include<cstring>
using namespace std;
int nums[20] = { 3, 6, 9, 2, 4, 5, 1, 57, 6, 98, 0, 21, 34, 17, 77,68,24, 18,9,89 };
void q_sort(int* arr,int left,int right);
int guiwei(int* arr, int left, int right);
int main()
{
	int n = sizeof nums / sizeof(int);
	q_sort(nums, 0, n - 1);
	cout << "排位后的数组为" << endl;
	for (int i = 0; i < n; i++)
	{
		cout << nums[i];
		cout << " ";
	}
	return 0;
}
int guiwei(int* arr, int left, int right)
{
	int middle = arr[left];
	int i = left, j = right;
	while (i < j)
	{
		while (i < j && arr[j] >= middle)
		{
			j--;
		}
		if (i < j)
		{
			int temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
			i++;
		}
		while (i < j && arr[i] <= middle)
		{
			i++;
		}
		if (i < j)
		{
			int temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
			j--;
		}
	}
	return i;
}
void q_sort(int* arr, int left, int right)
{
	int mid;
	if (left < right)
	{
		mid = guiwei(arr, left, right);
		q_sort(arr, left, mid - 1);
		q_sort(arr, mid + 1, right);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值