欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

dxw 518 快速排序

时间:2024-05-18 09:16 作者:admin 点击:
/* 快速排序(从小到大) 6 7 3 2 5 8 1 9 4 t i- -j 1、找标兵(基准元素),通常找第一个元素,作为基准元素,基准元素的值会对算法速度有一定的影响 2、找哨兵*2,分别记录左右两端 3、先

快速排序(从小到大)

   6 7 3 2 5 8 1 9 4

   t

   i->           <-j

1、找标兵(基准元素),通常找第一个元素,作为基准元素,基准元素的值会对算法速度有一定的影响

2、找哨兵*2,分别记录左右两端

3、先j后i相向而行

   (a)j向左移动,直到与i相遇或当前元素小于标兵,停止:j->4

   (b)i向右移动,直到与j相遇或当前元素大于标兵,停止:i->7

   (c)交换i与j的元素值(643258197),重复3直到i与j相遇

4、交换标兵与哨兵对应的值(143256897)

此时标兵位置正确,且左右两端的数据均小于(大于)标兵

5、将左右两端的数据分别从1开始递归,直到左右两端的数据数量小于等于1,递归结束

{6}[7] 3  2  5  8  1  9 [4]

{6} 4  3  2  5 [8][1] 9  7

{6} 4  3  2  5[[1]]8  9  7

1  4  3  2  5 |6| 8  9  7

{1} 4  3  2  5    {8} 9  7


#include <iostream>

using namespace std;

int a[9]={6,7,3,2,5,8,1,9,4};

void qsort(int left,int right){

   if(right-left<=1) return ;

   int t=a[left];

   int i=left,j=right;

   while(i!=j){

       while(i!=j&&a[j]>=t) j--;

       while(i!=j&&a[i]<=t) i++;

       if(i!=j) swap(a[i],a[j]);

   }

   if(i!=left) swap(a[i],a[left]);

   qsort(left,i-1);

   qsort(i+1,right);

}

int main(){

   qsort(0,8);

   for(int i=0;i<9;i++) cout<<a[i]<<" ";

   return 0;

}


(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%