快速排序的基本思想:http://sjjp.tjuci.edu.cn/sjjg/DataStructure/DS/web/paixu/paixu8.3.2.1.htm
/*
主题:快速排序
作者:karl
邮箱:nixindong@hotmail.com
开发语言:C
开发环境:Microsoft Visual Studio
时间:2012-06-10
*/
#include <stdio.h>
int Paritition(int a[], int i, int j);
void QuickSort(int a[], int p, int r);
int main (void)
{
int i;
int a[8] = {2, 8, 7, 1, 3, 5, 6, 4};
QuickSort(a, 0, 7);
for(i = 0; i < 8; i++)
{
printf("%-5d", a[i]);
}
putchar('\n');
return 0;
}
int Paritition(int a[], int i, int j)
{
//用区间的第一个记录作为基准
int pivot = a[i];
//从区间两端交替向中间扫描,直到i=j为止
while(i < j)
{
//pivot相当于在位置i上
while (i < j && a[j] > pivot)
{
//从右向左扫描,查找第一个数值小于pivot的记录a[j]
j--;
}
//表示找到了的a[j]数值小于 < pivot
if(i < j)
{
//相当于交换a[i]和a[j],交换后i指针加1
a[i] = a[j];
i++;
}
//pivot的位置相当于在j上
while(i < j && a[i] < pivot)
{
//从左向右扫描,查找第一个关键字大于pivot的记录a[i]
i++;
}
//表示找到了a[i],使a[i] > pivot
if (i < j)
{
a[j] = a[i];
j--;
}
}
a[i] = pivot;
return i;
}
void QuickSort(int a[], int p, int r)
{
int q;
if (p < r)
{
q = Paritition(a, p, r);
QuickSort(a, p, q- 1);
QuickSort(a, q+1, r);
}
}