快速排序法的效率在于轴的选取,本方法选取中间值作为轴。具体方法如下:
1.同样的先得右找比s大的索引i,然后找比s小的索引j;
2.只要两边的索引还没有交会,就交换i 与j 的元素值;
3.这次不用再进行轴的交换了,因为在寻找交换的过程中,轴位置的元素也会参与交换的动作;
#include <iostream>
#include <stdlib.h>
using namespace std;
#define swap(x,y){int t=x;x=y;y=t;}//#define的用法
void fast_shot(int number[],int begin,int end);
int main ()
{
int number[10]={11, 25, 11, 4, 88, 2, 108, 3, 2, 21};
fast_shot(number,0,9);
for (int i = 0 ; i < 10 ; i ++)
{
cout << number[i] << " ";
}
cout << endl;
system("pause");
}
void fast_shot(int number[],int begin,int end)
{
int mid,i,j,s;
if (begin < end)
{
mid = (begin + end)/2;
i=begin-1;
j =end + 1;
s =number[(begin + end)/2];
while(1)
{
while (number[++i] < s );
while( number[--j] > s );//循环
if( i >= j )
break;
swap(number[i],number[j]);
}
fast_shot(number,begin,i-1);//嵌套
fast_shot(number,j+1,end);
}
}