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

}

猜你喜欢

转载自blog.csdn.net/uperficialyu/article/details/79018078