快速排序(QuickSort)是一种排序算法,并且非常的实用。快速排序的原理是先找一个基准值,然后和序列的每个值比较,大于基准值的放在基准值右边,小于基准值的放在左边。那么数组将会被分割成两组,左边的是小于基准值的,右边是大于基准值的,那就是说基准值的位置已经确定。然后分别为这两组找基准值进行分割,经过递归后,数组的元素位置都会确定。
#include<stdio.h>
#include<stdlib.h>
#define M 10//作为数组的长度
//打印数组
void printfarray(int *p,int len)
{
for(int *temp=p;temp<p+len;temp++)
{
printf("%3d",*temp);
}
printf("\n");
}
//交换两个值
void swap(int *pa,int *pb)
{
int temp=*pa;
*pa=*pb;
*pb=temp;
}
void quicksort(int *p,int left,int right)
{
int i=left;//副本
int j=right;//副本
if(i<j)//i要小于j
{
while(i<j)
{
while(p[left]>p[i])//p[left]作为基准值
{
i++;//从左往右,直到找到有大于基准值的退出循环
}
while(p[left]<=p[j])
{
j--;//从右往左,直到找到有小于基准值
}
swap(&p[i],&p[j]);//交换两者
}
//当i不小于j时,刚好把数组遍历了一次,找到了第一个基准值的位置
//p[j]作为新的基准值,此时的p[left]值位置已经确定
swap(&p[left],&p[j]);
quicksort(p,left,j-1);//p[j]值已经确定位置
quicksort(p,j+1,right);
}
}
void main()
{
int a[M]={ 35, 23, 45, 66, 78, 30, 14, 8, 54, 15};//随机写的数组
printfarray(a,M);
quicksort(a,0,M-1);
printfarray(a,M);
system("pause");
}