#include <iostream>
using namespace std;
/*
快速排序需要选择一个基准数,一趟排序过程就是将所有数按与这个基准数的大小关系排序的过程:大的放到右边,
小的放到左边。按照这个思路再不断分治。
*/
int array[] = {48,62,35,77,55,14,35,98};
int OneTimeSort(int * a,int left,int right)
{
int BaseNum = a[left];
int pos = left;
int turn = 1;
while(left != right)
{
if( turn == 1)
{
if(a[right] <= BaseNum)
{
int t = a[pos];
a[pos] = a[right];
a[right] = t;
turn = 0;
pos = right;
} else {right--;continue;}
}
if( turn == 0)
{
if(a[left] > BaseNum)
{
int t = a[pos];
a[pos] = a[left];
a[left] = t;
turn = 1;
pos = left;
} else{left++;continue;}
}
}
return pos;
}
void qsort(int * a,int left,int right)
{
int pos;
if(left < right)
{
pos = OneTimeSort(a,left,right);
qsort(a,left,pos - 1);
qsort(a,pos + 1,right);
}
}
int main()
{
qsort(array,0,7);
for(int i = 0;i <= 7;i++)
cout<<array[i]<<" ";
cout<<endl;
return 0;
}
抽空写了下快排。简单的贴下代码。
快排的算法有两步:1、写出一趟的排序过程;2、利用分治的思想,递归的对整个数列排序。