1. 程式人生 > >快速排序(C語言)

快速排序(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;

}