简介
快速排序(英语:Quicksort),又称为划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由東尼·霍爾提出。在平均狀況下,排序個个项目要
(大O符号)次比较。在最坏狀況下则需要
次比较,但这种狀況并不常见。事实上,快速排序
通常明显比其他种算法更快,因为它的內部循环(inner loop)可以在大部分的架构上很有效率地运行。
如果不明白原理,可以看看百度百科关于快速排序算法的说明:快速排序算法原理说明。
代码实现
# include <stdio.h>
/**
* 时间:2016年6月5日 19:24:21
* 内容:快速排序法
* 快速排序法的使用
*/
int count=0;
void QuickSort(int*,int,int);
void Info(int*,int);
int main(void)
{
int a[10]={8,1,9,2,3,6,4,5,0,7};
Info(a,10);
QuickSort(a,0,9);
Info(a,10);
return 0;
}
/**
* 快速排序
* @param s 未排序的数组
* @param l 最左端元素的角标
* @param r 最右端元素的角标
*/
void QuickSort(int* s ,int l,int r)
{
if (l<r)
{
int i=l;
int j=r;
int pivot=s[i];// 参照元素
while(i<j)
{
printf("----------%d----------\n", count);
// 从右向左边找第一个小于pivot的数
printf("pivot = %d\n", pivot);
printf("left = %d\n", i);
printf("right = %d\n", j);
while(i<j && s[j]>pivot)
{
j--;
}
if(i<j)
{
s[i]=s[j];
i++;
}
Info(s,10);
printf("pivot = %d\n", pivot);
printf("left = %d\n", i);
printf("right = %d\n", j);
// 从左向右边找第一个大于pivot的数
while(i<j && s[i]<pivot)
{
i++;
}
if (i<j)
{
s[j]=s[i];
j--;
}
Info(s,10);
s[i]=pivot;
printf("将pivot归位\n");
Info(s,10);
printf("----------%d----------\n", count++);
QuickSort(s,l,i-1);
QuickSort(s,i+1,r);
}
}
}
void Info(int*a,int n)
{
for (int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}