快速排序算法的C语言实现1
快速排序主要基于“二分”的思想,每次找出一个基准数从而将数列以基准数为界限分为两部分,接着再对左右两边的数列再次排序(即再次调用该排序函数)。以上为本人学习过程中对该算法的理解,若有不足之处,求指正!
代码如下2
#include <iostream>#include <algorithm>using namespace std;void sortNum(int beginum,int endnum);int num[10] = {0};int i,mid,j;int main(){int k = 0;scanf("%d",&k);//输入要排序的数字个数for(i = 0;i<k;i++)//输入数列{scanf("%d",&num[i]);}sortNum(0,k-1);//对0~k-1的数排序for(i = 0;i<k;i++){printf("%d ",num[i]);}return 0;}void sortNum(int beginum,int endnum){int a = 0,t = 0;mid = num[beginum];i = beginum;j = endnum;while(1){while(num[j]>=mid&&j!=i)j--;if(i>=j)break;while(num[i]<=mid&&i!=j)i++;if(i>=j)break;t = num[i];num[i] = num[j];num[j] = t;}swap(num[beginum],num[j]);//到此处为止,第一个基准量归位if(i-beginum>1){sortNum(beginum,i-1);//对前半部分进行排序}if(endnum-i>1){sortNum(i+1,endnum);//对后半部分进行排序}}
本篇部分内容参考《啊哈算法》 ↩︎
运行环境为Code::Blocks 20.03 ↩︎