算法笔记-快速排序(随机数)

本文详细介绍了快速排序算法,重点讲解了如何通过随机数策略避免最坏情况的发生,包括随机选取基准元素、分区过程的优化,以及在C++代码中的具体实现。通过实例演示了如何使用C++进行快速排序,并探讨了其在实际编程中的应用和性能提升。
摘要由CSDN通过智能技术生成

快速排序:
 

#include<iostream>
#include<stdlib.h>//
#include<time.h>//这两个都是调用随机数的函数;
using namespace std;
int n;
const int maxn=100010;
int a[maxn];
int partition(int a[],int left,int right){//快排划分区间; 
	int num=rand()%(right-left+1)+left;//随机数的下标,产生一个[left,right]的随机数,这样做的目的是防止因有序数列导致时间复杂度变成n^2,利用随机数可以尽可能的划分长度相等的区间; 
	int temp=a[num];
	swap(a[left],a[num]);///a[num]已经用temp取出来了,把最左的位置空出来; 
	while(left<right){
	while(left<right&&temp<a[right])right--;//left有空位,所以从右边开始遍历,如果没有left<right这句话,如果temp右边的数都是小于temp的,那么左指针就会一直移动直到数组越界; 
	a[left]=a[right];
	while(left<right&&temp>=a[left])left++;
	a[right]=a[left];
	}
	a[left]=temp;
	return left;
	}
void quicksort(int a[],int left,int right){
	if(left<right){//划分区间,直至每个区间的单位长度为1;
		int pos=partition(a,left,right);//不断确定基准值的位置,因为当每个区间的单位为1的时候就是每个基准值的位置确定是时候,从而满足排序;
		quicksort(a,left,pos-1);
		quicksort(a,pos+1,right);
	}
}
int main(){
    srand((unsigned)time(NULL));//产生随机数的种子,srand(初始化随机种子);
	cin>>n;
	for(int i=0;i<n;i++)cin>>a[i];
	quicksort(a,0,n-1);
	for(int i=0;i<n;i++)cout<<a[i];
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值