/*
2016-11-17 11:30:14
快速排序
*/
#include<stdio.h>
#include <stdlib.h>
void QuickSort(int a[], int low, int high);
int FindPos(int* a, int low, int high);
int main(void)
{
int a[10] = { 11, -8, 4, 54, 1, -99, 42, 23, 45, 68 };
QuickSort(a, 0, 9); //第二个参数是第一个元素的下标,第三个参数是最后一个元素的坐标
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
printf("\n");
system("pause");
return 0;
}
void QuickSort(int a[], int low, int high)
{
int pos;
if (low < high)
{
pos = FindPos(a, low, high);
QuickSort(a, low, pos - 1);
QuickSort(a, pos + 1, high);
}
}
int FindPos(int* a, int low, int high)
{
int val = a[low];
while (low < high)
{
while (low < high && a[high] >= val)
--high;
a[low] = a[high];
while (low < high && a[low] <= val)
++low;
a[high] = a[low];
} //终止while循环之后low和high一定是相等的
a[low] = val;
return low; //low可以改为high,但不能改为a[low]和a[high]
}