题目4.快速排序

排序在各种场合经常被用到。

快速排序是十分常用的高效率的算法。

其思想是:先选一个“标尺”,

用它把整个队列过一遍筛子,

以保证:其左边的元素都不大于它,其右边的元素都不小于它。

这样,排序问题就被分割为两个子区间。

再分别对子区间排序就可以了。

下面的代码是一种实现,请分析并填写划线部分缺少的代码。

#include<stdio.h>

voidswap(int a[], inti, int j)

{

int t = a[i];

a[i] = a[j];

a[j] = t;

}

intpartition(int a[],int p, int r)

{

int i = p;

int j = r + 1;

int x = a[p];

while(1){

while(i<r && a[++i]<x);

while(a[--j]>x);

if(i>=j) break;

swap(a,i,j);

}

______________________;

return j;

}

voidquicksort(int a[],int p, int r)

{

if(p<r){

int q = partition(a,p,r);

quicksort(a,p,q-1);

quicksort(a,q+1,r);

}

}

intmain()

{

int i;

int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};

int N = 12;

quicksort(a, 0, N-1);

for(i=0; i<N; i++) printf("%d ", a[i]);

printf("\n");

return 0;

}

注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。

考察调试程序BUG的能力,步骤如下:

①写出正确的程序结果

②对照程序输出结果进行逻辑推测

③观察程序代码找出漏洞

首先正确的排序顺序:1 2 5 6 6 8 12 13 17 19 24 27

将不做任何修改的程序输出结果输出:

我们要寻找出现这个结果的原因,我们得把每次程序进行一次快排的结果输出来:

void quicksort(int a[],int p, int r)
{if(p<r){int q = partition(a,p,r);/*for(int i=0; i<12; i++) printf("%d ", a[i]);printf("\n");printf("%d\n",q);*/quicksort(a,p,q-1);quicksort(a,q+1,r);}
}

我们在q的下面将我们检测输出的代码注释,检测时去掉注释即可。我们观察输出结果以及每次“标尺”所取得位置:

我们可以很明显的看到在第一次快排后,5的位置和2的位置要进行对调,而且“标尺”的位置取得是2,也就是数列中的第3个位置!!!

所以我们在partition()中进行修改:

int partition(int a[],int p, int r)
{int i = p;int j = r + 1;int x = a[p];while(1){while(i<r && a[++i]<x);while(a[--j]>x);if(i>=j) break;swap(a,i,j);}swap(a,p,j);/*所填代码*/return j;
}

最后我们再一次检验输出结果:

我们可以看到最终结果就是我们想要的正确结果!!!

所以所填代码为:swap(a,p,j);

2016年蓝桥杯C语言大学A组题目4--快速排序相关推荐

  1. 220409蓝桥杯C语言大学C组手算填空题T^T

    220409蓝桥杯 试题 A: 排列字母 试题 B: 特殊时间 试题 C: 纸张尺寸 试题 D: 求和 试题 E: 数位排序 只学到指针前的知识,做蓝桥杯能做到什么程度? 试题 A: 排列字母 本题总 ...

  2. 蓝桥杯 2018年蓝桥杯C语言大学C组 C/C++

    1.哪天返回 小明被不明势力劫持.后莫名其妙被扔到x星站再无问津.小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文. 他决定在x星战打工.好心的老板答应包食宿,第1天给他1元钱. 并 ...

  3. 第十届蓝桥杯C语言大学B组C/C++ 试题A:组队

    [问题描述] 作为篮球队教练,你需要从以下名单中选出1号位至5号位各一名球员,组成球队的首发阵容. 每位球员担任1号位至5号位时的评分如下表所示.请你计算首发阵容1号位至5号位的评分之和最大可能是多少 ...

  4. 2021第十二届蓝桥杯省赛JAVA B组 题目+答案(复现赛)

    2021第十二届蓝桥杯省赛JAVA B组 题目+答案(复现赛) A:ASC B:卡片 C:直线 D:货物摆放 E:路径 Floyed Dijkstra F:时间显示 G:最少砝码 H:杨辉三角形 I: ...

  5. 第十一届蓝桥杯C/C++ 大学 B 组大赛软件类省赛

    试题 A: 跑步训练 本题总分:5 分 [问题描述] 小明要做一个跑步训练. 初始时,小明充满体力,体力值计为 10000.如果小明跑步,每分钟损耗 600 的体力.如果小明休息,每分钟增加 300 ...

  6. Java实现第十一届蓝桥杯C/C++ 大学 B 组大赛软件类 省赛真题(希望能和各位大佬能一起讨论算法题:讨论群:99979568)

    跑步训练 纪念日 合并检测 REPEAT程序 矩阵 整除序列 解码 走方格 整数拼接 网络分析 试题 A: 跑步训练 本题总分:5 分 [问题描述] 小明要做一个跑步训练. 初始时,小明充满体力,体力 ...

  7. 蓝桥杯大赛(大学B组)—— 数字三角形 (C语言)

    1.题目描述(蓝桥练习题) 上图给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和(路径上的每一步只可沿左斜线向下 ...

  8. 蓝桥杯大赛(大学B组)——2020省赛 跑步锻炼 (C语言)

    题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 小蓝每天都锻炼身体. 正常情况下,小蓝每天跑 1 千米.如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 ...

  9. 2017第八届蓝桥杯省赛-大学A组 包子凑数

    标题:包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可以认为是无限笼. 每当有顾客想买X个包子,卖包子的大叔就会 ...

最新文章

  1. 揭秘:深度网络背后的数学奥秘
  2. Charles弱网测试(Web)
  3. POJ-1840 Eqs Hash表
  4. ClassNotFoundException和NoClassDefError之间的区别
  5. vue怎么自己创建组件并引用_关于vue如何创建一个自定义组件(这是项目中经常得用的)...
  6. 网络规划---网络计划图的时间参数计算
  7. 如何快速构建一个企业revit族库(含插件)
  8. KND数控系统PLC开发环境
  9. php speex转码为mp3,ffmpeg speex转换为mp3或者aac
  10. 蓝牙BT射频测试(转发)
  11. 火狐 dns_如何在Firefox中通过HTTPS启用DNS
  12. 电路原理02 电阻、独立源、受控源
  13. python毕业设计课题-毕业设计:爬虫及数据分析
  14. java递归堆栈溢出_【java】递归次数过多导致堆栈溢出
  15. 2021.9月win10补丁造成共享打印机问题报错0X0000011b
  16. 机器学习练手---负荷数据预测
  17. java cookie路径_路径问题以及cookie详解
  18. 码出高效_第一章 | 有意思的二进制表示及运算
  19. java迷题_Java谜题3:汽车
  20. Atom编辑器:基本使用

热门文章

  1. 开发手札:unity+vscode联合开发
  2. 【RPC】RPC基础(二)RPC协议
  3. DELL 服务器带外管理
  4. ConvNeXt:2022年CV算法工程师抄作业必备手册!
  5. 文件夹加密巧用“类标识符”
  6. mybatis中的resultType
  7. odoo 增加自定义配置项 二 group
  8. 如何在linux里面查看防火墙,linux查看防火墙(linux?如何查看防火墙是否开启)
  9. Linux ifconfig 不显示ip
  10. DOS命令大全(copy)