快速排序算法

本文详细介绍了快速排序算法的实现过程,包括如何选择基准元素、划分数组以及递归调用。通过引用传递的方式在原数组上进行操作,确保排序的高效性。代码示例展示了如何使用C++实现快速排序,并在主函数中读取用户输入的数组,排序后输出结果。该算法具有平均时间复杂度为O(n log n)的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<vector>
#include<algorithm>
#include "IO.h"  //处理输入输出
using namespace std;
//也可将vector<int>nums; 放在全局域
//void quickSort(int i,int j)

//以升序为例   low  < 基准  <   high
void quickSort(vector<int> &nums,int i,int j) //引用传递,在原数组进行操作
{	
	int temp; //保存基准元素
	int low, high;  //遍历low++   high--

	low = i;   //记录每组起始位置、终止位置
	high = j;

	if (low > high) //递归出口
	{
		return; 
	}

	temp = nums[low]; //记录基准元素
	
	while (low != high)
	{
        //找第一个元素num[high] < temp 的下标
		while (temp <= nums[high]  && low < high) 
		{
			high--;
		}
        //找第二个元素num[low] > temp 的下标
		while (temp >= nums[low] && low < high)
		{
			low++;
		}
		//交换
		if (low < high)  //low与high没有相遇
		{
			swap(nums[low], nums[high]);
		}	

	}
	//low与high相遇,基准元素与nums[low]交换
	nums[i] = nums[low];
	nums[low] = temp;

	quickSort(nums,i, low - 1);  //递归调用 
	quickSort(nums,high + 1, j);	
		
	return;
}

int main()
{
	vector<int> nums;	
	nums = inputNum(); //从键盘输入一组数,保存在nums中
	int len = nums.size();

	quickSort(nums,0, len-1);

	printArray(nums); //输出排序后的数组

	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值