</pre><pre code_snippet_id="494078" snippet_file_name="blog_20141023_1_1140798" name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
#define N 10
int KeyPos(int arr[], int low, int high);
void QuickSort(int arr[], int low, int high);
int main()
{
int a[10] = {11, 2, 4, 3, 12,
8, 9, 5, 7, 10};
for (int i = 0; i < N; i ++)
{
printf("%-4d", a[i]);
}
printf("\n");
QuickSort(a, 0, N-1);
for (int i = 0; i < N; i ++)
{
printf("%-4d", a[i]);
}
system("pause");
return 0;
}
int KeyPos( int arr[], int low, int high )
{
int key = arr[low];
while (low < high)
{
while (low <high && arr[high] >= key)
high --;
if (low < high)
{
arr[low++] = arr[high];
}
while (low < high && arr[low] <= key)
low ++;
if (low < high)
{
arr[high--] = arr[low];
}
}
arr[low] = key;
return low;
}
void QuickSort( int arr[], int low, int high )
{
int keypos;
if (low < high)
{
keypos = KeyPos(arr, low, high);
QuickSort(arr, low, keypos-1);
QuickSort(arr, keypos+1, high);
}
}
基本思想:关键字key为中心,左边的数小于key,右边的数大于key
1.取arr[low]为关键字key,
2.从最高位high开始,自右向左,找到第一个小于key的数,复制给arr[low].
3.从low+1开始,自左向右,找到第一个大于key的数,复制给arr[high];重复2.3直到low == high为止;即一次快速排序完成。
4.然后对关键字key左边的数使用快速排序,关键字key右边的数使用快速排序。(递归思想)