快速排序c++版

#include<iostream>
using namespace std;

/*
 * @author 饶奇奇
 *@time 2022/4/22
 * 使用软件  vim
 * 算法思路:
 * 	所谓基准数归位就是让它的右边全部大于它,它的左边全部小于它
 * 	1.以第一个数为基准数
 * 	2.从右开始扫描遇到比基准数小的数停住,把这个值赋给左指针指向的位置
 * 	3.从左指针下一个数开始扫描遇到比基准数大的数然后停住然后给上一个右指针的位置,并且向左移动右指针
 * 	4.如果左指针和右指针碰撞到了一起说名上一次左指针或者右指针其中有一个值和这个碰撞位置的值一样,而这个碰撞位置的值就是基准数归位的值
 *      5.把碰撞位置的基准值归位
 *      6.然后把基本左边进行快排,把右边进行快排
 *
 *容易错误:
 * 	每一次确定一个大于或者小于基准数的指针位置时候
 * 	要进行判断不能让左右两个指针碰撞不然归位时候就会把要归位基准数插入到下一个位置
 * 	
 * 	
 * 	
 *
 * 	
 * 	
 */

//快速排序
void quicksort(int** arr,int start,int end)
{
	if(start>end)return;

	//cout<<"递归"<<endl;
	//默认采用第一个数为归为数
	int i=start,j=end;
	int gws=(*arr)[start];
	//容器存在长度才进行快排
	//cout<<"i--"<<i<<"j---"<<j<<"gws--"<<gws<<endl;
	//cout<<endl<<endl;
		
	   //每一趟确定一个归位数
        while(start<end)
        {
		//从右边开始搜索
		//查找比归为数要小的数
		while((*arr)[end]>=gws&&end>start)end--;
		/*让上一次的start指针所指向的位置一定是比归为数
		
		*/
		/*
 			加上这个if的作用是避免当end==start的时候start海象后面移导致后面的基准归位出错
 		*/
		if(end>start)(*arr)[start++]=(*arr)[end];
		//查找比归位数大的数
		while((*arr)[start]<gws&&start<end)start++;
		if(end>start)(*arr)[end--]=(*arr)[start];		
	   	//cout<<"start--"<<start<<"end--"<<end<<endl;
	   }
		
	   //start指针和end指针碰撞的位置就是归位数最终指向的位置
           (*arr)[start]=gws;	
	   //对左边进行快排
	   quicksort(arr,i,start-1);
	   quicksort(arr,start+1,j);
	   //对右边进行快排
			
}


int main()
{
	int s[] = {7,22,94,13,2,1,85};
	int *b =s;
	quicksort(&b,0,6);			
	for(int i=0;i<7;i++){
		cout<<b[i]<<endl;
	}
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值