快速排序

快速排序算法步骤:
1、从数列中挑出一个元素,称为 “基准”(pivot),
2、重新排序数列,所有元素比基准值小的摆放在基准左区间,所有元素比基准值大的摆在基准的右区间。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分操作。
3、递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代中,它至少会把一个元素摆到它最后的位置去。

#include <iostream>
using namespace std;
void quicksort(int a[], int low, int high)
{
 int i,j,pivot;
 if(low < high)
 {
  pivot = a[low];
  i = low;
  j = high;
  while(i < j)
  {
   while(i < j && a[j] >= pivot)
    j--;
   if(i < j)
    a[i++] = a[j];                 //这里把比pivot小的元素放到低端


   while(i < j && a[i] <= pivot)
    i++;
   if(i < j)
    a[j--] = a[i];                    //这里把比pivot大的元素放到高端
  }

  a[i] = pivot;                                    //pivot放到最终位置
  quicksort(a, low, i - 1);                    //向左区间递归排序
  quicksort(a, i + 1, high);                //向右区间递归排序
 }
}


int main()
{
 int a[9] = {1,5,3,8,7,6,2,9,4};
 
 quicksort(a,0,8);
 for(int i = 0; i < 9; i++)
 {
  cout << a[i] << " ";
 }
 cout << endl;
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值