C语言数据结构和算法快速排序法
https://m.toutiao.com/is/JHSWhce/
一、设计思想
对一组无序的数组进行排序的时候,选其中一个数组元素(一般为中间元素)作为参照,把比它小的元素放到它的左边,比它大的元素放在右边形成2个子数组。再以此方法对2个子数组递归排序,直至最后完成整个数组的排序
例如有数组:{5, 4 , 9 ,7 ,6 ,2 ,1 ,3 , 8 , -1}
第一步:
第二步:
第三步:
第四步:
第五步:
第六步:
第七步:
二、C语言实现
#include 'stdio.h'
#include 'stdlib.h'
int a[10]={5,4,9,7,6,2,1,3,8,-1};
void quickSort(int i,int j){
int m,n,temp;
int k;
m = i;
n = j;
k = a[(i+j)/2];
while(m<=n){
//从左到右找比k大的元素
while(a[m]<k && m<j) m++;
//从右到左找比k小的元素
while(a[n]>k && n>i) n--;
//若找到且满足条件,则交换
if(m<=n){
temp = a[m];
a[m] = a[n];
a[n] = temp;
m++;
n--;
}
}
if(m < j) quickSort(m,j);
if(n > i) quickSort(i,n);
}
int main()
{
quickSort(0,9);
for(int i=0;i<=9;i++){
printf('\t%d',a[i]);
}
return 0;
}
赞 (0)