采用先确定数字然后找位置的方法。
从需要处理的数字两端选择一个作为基准数字。
每次把基准数字和另一端的数字进行顺序调整,直到和所有其他数字都进行过顺序调整。
每次调整过顺序后就把非基准数字排除在外。
查找算法可以从一组数字中找到某个数字所在的位置
/*
* 快速排序
* */
#include <stdio.h>
void quick_sort(int *p_num, int size)
{
int base = *p_num;
int *p_start = p_num, *p_end = p_num + size - 1, tmp = 0;
if (size <= 1)
{
return ;
}
while (p_start < p_end)
{
//每次把基准数字和另外一个数字进行顺序调整
if (*p_start > *p_end)
{
tmp = *p_start;
*p_start = *p_end;
*p_end = tmp;
}
if (*p_start == base)
{
//p_start指针捆绑的存储区里是基准数字
p_end--;
}
else
{
//p_end指针捆绑的存储区里是基准数字
p_start++;
}
}
//把基准数字左边的所有数字排列好
quick_sort(p_num, p_start - p_num);
//把基准数字右边的所有数字排列好
quick_sort(p_start + 1, size - (p_start - p_num) - 1);
}
int main()
{
int arr[] = {23, 27, 18, 33, 45, 9, 14};
int num = 0;
quick_sort(arr, 7);
for (num = 0;num <= 6;num++)
{
printf("%d ", arr[num]);
}
printf("\n");
return 0;
}