快速排序算法的C语言实现
快速排序算法的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); //对后半部分进行排序
}
}
淡雅随和,宁静致远!