快速排序(C语言)

本文介绍了一种高效的排序算法——快速排序。通过选取基准值并调整序列中的元素顺序,该算法能够递归地将序列分为更小的部分进行排序。文中提供了一个具体的C语言实现示例,并展示了如何对一个整数数组进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

采用先确定数字然后找位置的方法。

从需要处理的数字两端选择一个作为基准数字。

每次把基准数字和另一端的数字进行顺序调整,直到和所有其他数字都进行过顺序调整。

每次调整过顺序后就把非基准数字排除在外。

 查找算法可以从一组数字中找到某个数字所在的位置

/*

 * 快速排序

 * */

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值