基本思想:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,已达到整个序列有序。
一趟快速排序的具体做法是:附设两个指针low和high,他们的初值分别为low和high,设枢轴记录的关键字为pivotkey,则首先从high所指位置起向前搜索找到第一个关键字小于pivotkey的记录和枢轴记录互相交换,然后从low所指位置起向后搜索,找到第一个关键字大于pivotkey的记录与枢轴记录互相交换,重复这两步直至low=high为止。
代码如下:
#include <stdio.h>
#include <stdlib.h>
void Q_S(int s[], int low,int high){
int privotKey = s[low];
int l_tmp = low;
int h_tmp = high;
while (low < high)
{
while (low < high && s[high] >= privotKey)
{
high--;
}
s[low] = s[high];
while (low < high && s[low] <= privotKey){
low++;
}
s[high] = s[low];
}
s[low] = privotKey;
if (low != l_tmp)
Q_S(s, l_tmp, low - 1);
if (high != h_tmp)
Q_S(s, high + 1,h_tmp);
}
int main(int argc, char *argv[]){
int s[10] = { 99, 45, 34, 36, 86, 36, 79, 96, 53, 97 };\
int i, n = 10;
for (i = 0; i < n; i++)
printf("%d ", s[i]);
printf("\n");
Q_S(s, 0,9);
for (i = 0; i < n; i++)
printf("%d ", s[i]);
printf("\n");
system("pause");
return 0;