快速排序(C語言)
採用先確定數字然後找位置的方法。
從需要處理的數字兩端選擇一個作為基準數字。
每次把基準數字和另一端的數字進行順序調整,直到和所有其他數字都進行過順序調整。
每次調整過順序後就把非基準數字排除在外。
查詢演算法可以從一組數字中找到某個數字所在的位置
/*
* 快速排序
* */
#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;
}