核心思想
在数组中选一个基准数(通常为数组第一个);
将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边;
对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。
#include <stdio.h>
#define SIZE 6
//快速排序
void quick_sort(int num[], int low, int high)
{
int i, j, temp, partion;
i = low;
j = high;
partion = num[low]; //任命为中间分界线,左边比他小,右边比他大,通常第一个元素是基准数
if (i > j) //如果下标i大于下标j,函数结束运行
{
return;
}
while (i != j)
{
while (num[j] >= partion && j > i)
{
j--;
}
while (num[i] <= partion && j > i)
{
i++;
}
if (j > i)
{
temp = num[j];
num[j] = num[i];
num[i] = temp;
}
}
num[low] = num[i]; // i = j 了,不能够满足条件,所以就要进行互换,将 i 指向的数,与基准数互换
num[i] = partion;
quick_sort(num, low, i - 1);
quick_sort(num, i + 1, high);
}
int main(int argc, char** argv)
{
//创建一个数组
int num[SIZE] = { 0 };
int i;
//输入数字
for (i = 0; i < SIZE; i++)
{
scanf("%d", &num[i]);
}
quick_sort(num, 0, SIZE - 1);
for (i = 0; i < SIZE; i++)
{
printf(" %d ", num[i]);
}
return 0;
}