快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择。
解法 这边所介绍的快速演算如下:将最左边的数设定为轴,并记录其值为 s
廻圈处理:
令索引 i 从数列左方往右方找,直到找到大于 s 的数
令索引 j 从数列左右方往左方找,直到找到小于 s 的数
如果 i >= j,则离开回圈
如果 i < j,则交换索引i与j两处的值
将左侧的轴与 j 进行交换
对轴左边进行递回
对轴右边进行递回
如下图:
C代码:
#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
#define MAX 10
#define swap(x,y) {int t;t=x;x=y;y=t;}
void quick_sort(int number[], int left, int right)
{
int i, j;
//int num = number[left]; //定义基准数
if (left < right)
{
i = left;
j = right + 1;
while (1)
{
while (i <= MAX&&number[++i] < number[left]); //从左至右查找比基准数大的数
//printf("%d\n", i);
while (j >= left&&number[--j] > number[left]);//从右至左查找比基准数小的数
//printf("%d\n", j);
if (i < j)
{
swap(number[i], number[j]);
}
if (i > j)
{
swap(number[j], number[left]);
break;
}
}
quick_sort(number, left, j - 1);//左半部分递归
quick_sort(number, j + 1, right); //右半部分递归
}
}
int main()
{
int num[10] = { 41 ,24 ,76 , 11 ,45 ,64 ,21 ,69 ,19 ,36 };
quick_sort(num, 0, 9);
for (int i = 0; i < 10; i++)
printf("%d ", num[i]);
system("pause");
return 0;
}