快排两种方法

方法一:先从右向左找比base小的数,再从左向右找比base大的数,最后是比base小的数在左边,比base大的数在右边。
void qSort(int *A, int l, int r){
	if(l<r){
		int i=l;
		int j=r;
		int base=A[l];
		int tmp;
		while(i<j){
			while(i<j&&base<=A[j]){
				j--;
			}
			while(i<j&&base>=A[i]){
				i++;
			}
			if(i<j){
				tmp=A[j];
				A[j]=A[i];
				A[i]=tmp;
		   }
		}
		A[l]=A[i];
		A[i]=base;
		qSort(A,l,i-1);
		qSort(A,i+1,r);
	}
}






方法二:从左向右遍历,分为 小于区--等于区--大于区,再依次递归小于区和大于区
void swap(int arr[],int i, int j){
	int tmp = arr[i];
	arr[i] = arr[j];
	arr[j] = tmp;
}
void partition(int a[],int l, int r,int *lef,int *rgt){
	int less=l-1;
	int more=r;
	while(l<more){
		if(a[l]<a[r]){
			swap(a,++less,l++);
		}else if(a[l]>a[r]){
			swap(a,--more,l);
		}else{
			l++;
		}
	}
	swap(a,more,r);
	*lef=less+1;
	*rgt=more;
}


void quicksort(int a[],int l,int r ){
	if(l<r){
		int lef,rgt;
		partition(a,l,r,&lef,&rgt);
		quicksort(a,l,lef-1);
		quicksort(a,rgt+1,r);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值