【算法解释】:快速排序(Quicksort)是对冒泡排序的一种改进。
【基本思想】:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
【基线条件】:也就是递归退出条件,当start<end的时候退出递归。
【程序设计】:
void quick_sort(int16_t *search_array, uint8_t start, uint8_t end)
{
uint8_t i;
uint8_t j;
uint8_t x;
i = 0;
j = 0;
x = 0;
if (start < end) /* 结束条件 */
{
i = start;
j = end;
x = search_array[start];
while (i < j)
{
while(i < j && search_array[j] >= x) /* 从右向左找第一个小于x的数 */
{
j--;
}
if(i < j)
{
search_array[i] = search_array[j];
i++;
}
while(i < j && search_array[i] < x ) /* 从左向右找第一个大于等于x的数 */
{
i++;
}
if(i < j)
{
search_array[j] = search_array[i];
j--;
}
}
search_array[i] = x;
quick_sort(search_array, start, i - 1); /* 递归调用 */
quick_sort(search_array, i + 1, end);
}
}
【调用示例】:
int main()
{
uint8_t i;
int16_t search_array[10] = {32,12,7,10,78,23,45,18,50,65};
printf(" 3.快速排序法:\n");
for( i = 0; i < 10; i++)
{
printf("%5d",search_array[i]);
}
printf("\n");
quick_sort(search_array,0,9);
for( i = 0; i < 10; i++)
{
printf("%5d",search_array[i]);
}
printf("\n");
return 0;
}