#include<stdio.h>
void QuickSort(int a[],int left,int right)
{
//当只有一个元素 不用再继续了,这里中断迭代递归关键点
if(left>=right)
return ;
int i=left;
int j=right;
int base=a[left]; //先把左边第一个数作为基准数,拿出来比较
// 下面进行交换 ,大的数放到base右边,小的放左边,相等的选固定一边就行
while(i!=j)
{
//先从右边寻求第一个比base小的数
while(j>i&&a[j]>=base)
j--;
a[i]=a[j]; //如果找到就放在i的位置(上一个位置),这里不理解可以用 5 3 9 7 2 6 实现以下
// 再从左边寻求第一个比base大的数
while(j>i&&a[i]<base)
i++;
a[j]=a[i];
}
// 到这里其实i与j是相等的,走到了中间了。这时把base放到这个位置
a[i]=base;
// 分别递归 两边的数据进行排序 直到每个部分都是一个元素,即各个部分有序
QuickSort( a,left,i-1);
QuickSort( a,i+1,right);
}
int main()
{
int i;
int a[10]={42,54,94,10,100,58,34,63,9,74};
QuickSort(a,0,9);
for(i=0;i<10;i++)
printf("%d,",a[i]);
return 0;
}
基础排序算法——快速排序
猜你喜欢
转载自blog.csdn.net/cj151525/article/details/85853867
今日推荐
周排行