算法2:快速排序

算法2:快速排序

基本思想:1.定基准:将大于基准的数和小于基准的数分开。2.左右两边重新定基准依次分开。

算法分析:代码实现

算法分析:

例如:将 6 1 2 7 9 3 4 5 10 8 这10个数排序

  1. 以6为基准,将6移动到合适位置。
    6为基准6为基准
      采用两个哨兵i,j左右移动。
  • 先向左移动哨兵j,遇到比6小的暂停;
  • 然后向右移动哨兵i,遇到比6大的暂停;
  • 交换哨兵i和j的值,将大于6的放到基准左边,小于6的放在基准右边。
  • 继续移动j和i并交换,直到哨兵相遇,交换基准和此时哨兵的值。
  • 此时基准6的左右两边分别是小于6和大于6的数
  1. 以6的左边数3,1,2,5,4重复上述活动

  2. 以6右边的9,7,10,8重复上述活动

  3. 总结
      可以看出明显的递归调用,左右反复递归

代码实现

 1#include <stdio.h>
2int a[100];   /* 用户输入的数值值*/
3void quicksort(int left,int right)
4
{
5    int i,j,t,temp;
6    if(left > right)
7        return;
8    temp = a[left];    /* 基准的值 */
9    i = left;
10    j = right;
11    while(i != j)
12    {
13        //顺序很重要,先从右往左找,在从左往右找
14        while(a[j] >=temp && i < j)
15            j--;
16        while(a[i] <=temp && i < j)
17            i++;
18        //交换位置
19        t = a[j];
20        a[j] = a[i];
21        a[i] = t;
22    }
23    // 基准归位
24    a[left] = a[i];
25    a[i] = temp;
26    quicksort(left,i-1);    // 继续处理左边的
27    quicksort(i+1,right);  //继续处理右边的
28    return;
29}

转载于:https://www.cnblogs.com/ywx123/p/10189623.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值