快排算法

对于无序的未经排序数组A[N],首先需要选择一个基准,这个基准是随意选的。给两个变量,一个从数组尾部利用数组下标开始迭代,一个从数组头部开始迭代。一个从数组头部开始迭代的数组遇到比基准数大的时候停止,保存变量。一个从数组尾部开始迭代的数组遇到比基准数小的时候停止,保存变量。交换上述两个变量继续迭代,当两个下标重合时停止迭代。此时将基准数与重合的下标进行交换,这个时候基准数左边的数都比基准数小。基准数右边的数都比基准数大。也就是这个基准数找到了他正确的位置。那么快速排序一次至少可以使一个基准数归位。最后对左方数组使用递归,对右方数组使用递归。快速排序的巧妙之处在于他一次排序两个位置,效率很高。与冒泡排序相比,他临时变量只多用了一个,都属于比较省空间的排序方法。是一种不稳定的排序方法。c++代码如下:(形参使用引用数组,直接修改外部数组顺序,在大型程序方面引用比指针更有优势,指针容易越界)

void quicksort2(int left,int right,int (&ab)[N])

{int i,j;
 int temp,temp2;
 i=left;
 j=right;
 temp=ab[left];
 if(left>right)
     return;
 while(i!=j)
 {
  while(ab[j]>=temp&&i<j){j--;}
  while(ab[i]<=temp&&i<j){i++;}
 
  if(i<j)
  {temp2=ab[i];
   ab[i]=ab[j];
   ab[j]=temp2;}
 }
 
ab[left]=ab[i];
ab[i]=temp;
 quicksort2(left,i-1,ab);
 quicksort2(i+1,right,ab);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值