#include"stdio.h"
#include"stdlib.h" // exit()
int a[10] = {1,10,5,4,7,8,6,2,3,4};
void func(int a[10],int left, int right)
{
int i,j,temp;
int t;
if(left > right) return ; //这一步非常重要 ,要来返回退出
i = left; j = right; //用i,j 来替换left 和 right
temp = a[left]; //设置temp 为基准数,同时为替换基准数做准备
while(i != j) //基准数未变化的 每一轮的比较
{
while(a[j] >= temp && j>i ) //先从右边开始,大于等于 就跳过
{
j--;
}
while(a[i] <= temp && j>i ) //然后左边 小于等于 就跳过
{
i++;
}
if(j > i) // 找到一对 i,j 不相遇的时候 交换
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
// i,j相遇后 用i 和原基准数 进行交换位置 利用了temp
a[left] = a[i];
a[i] = temp ;
func(a,i+1,right); //递归使用 从 i+1 到 right
func(a,left,i-1); //递归使用 从 left 到 i-1
}
int main()
{
func(a,0,9);
int i=0;
for(i = 0;i<10;i++)
{
printf("%d ",a[i]);
}
}
快速排序 ---C&C++
最新推荐文章于 2022-10-21 17:26:37 发布