一、 背景
桶排序:采用了以空间换时间的做法
冒泡排序:使用了以时间换空间的做法
那么,有没有一种算法,空间用的没有那么大,时间有没有那么浪费呢?
有,那就是快速排序算法。
二、 原理
冒泡排序是相邻的两个数两两相比,并且是从一头开始,所以效率慢
那么能不能跳跃式的相比,从两头开始呢?
可以选择一个数字作为基准点。
比这个数字小的数,都放在这个基准数字的左边。
比这个数字大的数,都放在这个基准数字的右边。
那么,这个数就回到了原来的位置。
那么,如何找这个基准位置呢?
三、实现代码
#include <stdio.h>
#include <stdlib.h>
void quickSort(int * pA,int left,int right)
{
//注意这里,这是程序的出口
if(left>right)
return ;
int i,j,t,temp;
temp=pA[left];
i=left;
j=right;
while(i!=j)
{
while(i<j && pA[j]>=temp)
j--;
while(i<j && pA[i]<=temp)
i++;
if(i<j)
{
t= pA[i];
pA[i]= pA[j];
pA[j]=t;
}
}
pA[left]= pA[i];
pA[i]=temp;
quickSort(pA,left,i-1);
quickSort(pA,i+1,right);
}
int main()
{
int i,n,a[100];
printf("please input the total of numbers");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("number %d is:",i+1);
scanf("%d",&a[i]);
}
quickSort(&a,0,n-1);
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}