c语言实现快速排序
众所周知,快速排序在排序算法中时间复杂度较为低,为O(nlogn),而选择,冒泡等排序的时间复杂度均为O(n^2)。
所以,现在我们来用c语言实现快速排序算法。
代码如下:
#include<stdio.h>
int partation(int a[],int left,int right)//找出中值,并找出中值左右两边的数
{
int tem=0;
tem=a[left];//使临时值等于列表左边第一个数
while(left<right)
{
while(left<right&&a[right]>=tem)//从左面找到比tem小的值
{
right-=1;//往左走一步
}
a[left]=a[right];//把右面的值写在左边的空位上
while(left<right&&a[left]<=tem)
{
left+=1;//往右走一步
}
a[right]=a[left];//把左面的值写在右面的空位上
}
a[left]=tem;//把tem 归位
return left;
}
int quit_sort(int a[],int left,int right)
{
int mid=0;
if(left<right)
{
mid=partation(a,left,right);
quit_sort(a,left,mid-1);//递归调用快排函数
quit_sort(a,mid+1,right);
}
}
int main()
{
int a[100],n;
printf("请输入需要排序的数字的数量:");
scanf("%d",&n);
printf("输入若干个数字:");
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
quit_sort(a,0,n-1);
for(int j=0;j<n;j++)
{
printf("%d ",a[j]);
}
return 0;
}