快速排序(c++版)

  1. 快速排序基本思想就是:在要排序的数组中找一个基数(以升序来讲),然后实现,以基数为中心,左边的数小于等于基数,右边是大于等于基数的数。在把得到的两个数组分别重复开始的思想。
  2. 一般基数选择是:最左边的数,中间的数,最右边的数。(基数可以选择,数组里任何一个数)。
  3. 咱们来看解释一下上面的实现。定义两个指针,一个从左边找大于等于基数的数,另一个从右边找小于等于基数的数。当左右都找到时,且左还小于右时就把两个数进行交换,交换后两个数都要相对往前移一位。找的条件就是当左边小于右边时。然后,以基数拆分为两组数组。再重复上面操作。
    咱们来看一个模板例子:
/**
*
*/
void quick_sort(int l , int r , int array[]){
	if(l>=r)return; //判断退出条件,当一组排好序后退出
	int i = l -1 ;
	int j = r+1 ;
	//因为每次交换好两个数时,两个数都要往前移动,代码中是先移动在判断来实现这个方法。因此要这样赋值。
	int tager = array[(l+r)/2];
	//以中值为基数	
	 while(i < j){
	        do i++;while(tager>array[i]);
	        do j--;while(tager<array[j]);
	        if(i<j)swap(array[i],array[j]);
	 }
	
	//接者把排好序的数组在分,接着排。(注意边界问题)。
	quick_sort(l,j,array);
	quick_sort(j+1,r,array);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值