【无标题】

快速排序算法步骤:

从数列中挑出一个元素,称为 “基准”(pivot);
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

#include <iostream>
 using namespace std;
void swap(int a[], int low, int high) 
{
    int t = a[low];
    a[low] = a[high];
    a[high] = t;
}
 
int partition(int a[], int low, int high)  
{
    int point = a[low];
	 while(low<high)
      {
          while(low<high && a[high]>=point)
          {
                 high--;
          }  
         swap(a,low,high);
              //}
         while(low<high && a[low]<=point)
          {
                low++;
          }  
          swap(a,low,high);
      }
    return low;
}
 
void paixu(int a[], int low, int high)   
{
    if(low<high){
        int point = partition(a,low,high);
        paixu(a,low,point-1);  
        paixu(a,point+1,high);
    }
}
    
int main()
{
    int i;
    int a[] = {23,34,6,24,62,88,109,27,6,18,1,17};
    int n = 12;
    
    paixu(a, 0, n-1);
    
    for(i=0; i<n; i++) 
    cout << a[i]<<endl;
    return 0;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值