快速排序算法是一种经典的算法,其平均时间复杂度为O(NlogN)最差时间复杂度和冒泡排序是一样的,都是O(N²)。
其实,快速排序算法是基于二分法的思想,结合递归。即可得到快速排序算法。
以下源代码供大家参考。
#include <stdio.h>
void quicksort(int a[101],int left,int right) //函数声明中定义数组需要带大小,这段代码可以移植。
{
int i,j,t,temp;
if (left>right)
return;
temp=a[left]; //temp中存储着基准数字
i=left;
j=right;
while (i!=j)
{
//顺序很重要,要先从右往左找
while (a[j]>=temp &&i<j)
j--;
//再从左往右找
while (a[i]<=temp &&i<j)
i++;
//交换两个数在数组中的位置
if (i<j) //如果i和j不相等,即两个基点没有相遇
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=temp;
quicksort(a,left,i-1); //继续处理左边的,这里是一个递归的过程
quicksort(a,i+1,right); //继续处理右边的,这里是一个递归的过程
return;
}
int main()
{
int a[101];
int i;
int l=0;
int n=99;
for (i=0;i<=n;i++) //初始化一个数组,里面的数字全部是由大到小
a[i]=n-i;
quicksort(a,0,n); //调用函数从而快排
for (i=0;i<=n;i++)
{
printf("%d\t",a[i]); //打印出正序的数组
l++;
if (l==5)
{
printf("\n");
l=0;
}
}
getchar(); //获取键盘缓冲区中的截止符
getchar(); //暂停程序等待输入
return 0;
}