快排可以说历史悠久且极负盛誉。今天就来了解下快排吧。
1,先在数组中找一个基准数x。
2,令j等于最右下标,从最右往左找出第一个比x小的数。
3,令i等于最左下标,从最左往右开始找出第一个比x大的数,与2中找到的数交换位置。
4,2,3分别从刚找到的位置按原来方向继续找,直到相遇i == j。
5,将相遇位置的值与基准数的值交换,
6,到此,在下标i左边的都是比x小的,右边的都是比x大的。
7,这两边分别按1-5步继续进行。
代码如下;
void func(int *a,int left,int right)
{
int i = left;
int j = right;
int x = a[left];
int temp = 0;
if(i < j)//退出条件
{
while(i != j)
{
while(a[j] >= x && i < j)//从右开始找第一个小于x的数
{
j--;
}
while(a[i] <= x && i < j)//从左开始找第一个大于x的数
{
i++;
}
temp = a[i];//交换
a[i] = a[j];
a[j] = temp;
}
a[left] = a[i];//基准数交换
a[i] = x;
func(a,left,i - 1);//左右部分递归
func(a,i + 1,right);
}
}