快速排序实现

快速排序

快速排序是冒泡排序的一种改进,也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。

但是冒泡排序再每一轮只把一个元素冒泡到竖列的一段,而快速排序再每一轮挑选一个基准元素,并让其他比它大的元素移动到数列的一旁,从而把数列拆成了两个部分。

挖坑法

顾名思义,挖坑发就是从右边取一个基准值用于比较数的key,取走的这个数的位置就成为了一个坑,再左边找比key大的数,然后再将这个数填在刚才取走的数的位置。

左右指针法

(1)取一个关键字key作为枢轴,一般取第一个数/最后一个数。

(2)设置两个变量left和right分别是0和n-1。

(3)从left一直向右走,找到一个大于key的值,right从后往前走,找到一个小于key的数,然后交换两个数。

(4)重复这3步骤,一直往后找,知道left=right,这时将key放在left的位置上即可。

前后(快慢)指针法

前后指针法(快慢指针法)是定义两个指针,一个cur指向数组第一个元素位置,pre指向cur前一个位置,选取最右边的元素key,比较cur指向的元素是否小于key,如果小于,pre后移一个位置,并和cur所指向的位置的元素进行交换,然后cur后移一个位置,以此类推。

代码实现

int partition(int l,int r){
	int temp=A[l];
    while(l<r){
    	while(l<r && A[r]>temp)
    		r--;
    	A[l]=A[r];
    	while(l<r && A[l]<=temp)
    		l++;
    }
    A[l]=temp;
    return l;
}
void quicksort(int l,int r){
	if(l<r){
   		int pos=partition(l,r);
    		quicksort(l,pos-1);
    		quicksort(pos+1,r);
   }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值