四、题目:快速排序
填空题
排序在各种场合经常被用到。
快速排序是十分常用的高效率的算法。

其思想是:先选一个“标尺”,
用它把整个队列过一遍筛子,
以保证:其左边的元素都不大于它,其右边的元素都不小于它。

这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。

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

#include <stdio.h>
void swap(int a[], int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}

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);
}
______________________;
return j;
}

void quicksort(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);
}
}

int main()
{
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;
}


分析思路:
大概了解快速排序,
先看主函数里面内容,进行排序后输出排序结果
代码:

#include <stdio.h>
void swap(int a[], int i, int j)
{int t = a[i];a[i] = a[j];a[j] = t;
}int partition(int a[], int p, int r)
{int i = p;  //p:左指针 int j = r + 1;  //r:右指针 int x = a[p];  //x为左指针第一个值 while(1){   //死循环   while(i<r && a[++i]<x);  //i的值小于r指向的值,i向右移动 while(a[--j]>x); //j向左移动 if(i>=j) break;  //当i指向的值大于j指向的值 swap(a,i,j);  //交换 }swap(a,p,j);return j;
}void quicksort(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);}
}int main()
{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;
}


答案:swap(a,p,j)

2016蓝桥杯C++A:快速排序(详解版,很快掌握)相关推荐

  1. 【蓝桥杯】 安慰奶牛----详解

    题目: Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路,但 ...

  2. 2013 第4届 蓝桥杯 黄金连分数【详解】

    黄金连分数[题目] 黄金分割数0.61803- 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它 ...

  3. 常用排序:冒泡排序与快速排序详解,看完这篇就够了!风马博客

    常用排序:冒泡排序与快速排序详解. 在排序算法中,冒泡排序和快速排序可以算是排序算法入门必会的两种排序了,今天和大家来分析一下如何快速理解并掌握这两种排序.首先冒泡排序是初学者最常用的排序,所以我们先 ...

  4. 玛雅2016 Mac主要功能及使用详解

    玛雅maya2016是一款功能非常强大的三维动画软件,maya2016破解版里不仅包含了三维建模.动画.视觉效果和渲染解决方案等功能,还加入了许多实用的功能.使用maya2016可以帮助用户更好的发挥 ...

  5. 2016计算机考研大纲视频,2016年考研专业课计算机大纲详解:操作系统

    一. 操作系统考查目标 今天我们来解析一下计算统考大纲操作系统部分的知识点.操作系统的研发能力很能够体现计算机软件发展的水平,因此操作系统是计算机课程体系里很重要的一门专业核心基础原理课程.在考研大纲 ...

  6. python 快速排序详解

    python 快速排序详解 快速排序函数 def partition(arr,low,high): i = ( low-1 ) #最小元素<索引>pivot = arr[high] #选取 ...

  7. 案例1:金融数据分析----code知识点详解版

    案例1:金融数据分析----code详解版 1.引言 1.1案例分析目标 1.2涉及知识点 1.3案例分析流程 2.数据获取 `涉及知识点:` 2.1安装*tushare*库 2.2获取Token 2 ...

  8. 电脑连接电视方法详解_电脑如何连网?——校园宽带的连接方法(详解版)

    玉屏洲电脑联网 详解版  联网前必备!--注册好的运维云账号 如果不知道啥是运维云,可以在公众号里发消息 运维云 获取运维云账号注册方法! 注册好的运维云样板 1 第一步·宽带连接 用网线一端连接墙上 ...

  9. 蓝桥杯练习系统之基础训练Java版(2-26)—— 报时助手

    蓝桥杯练习系统之基础训练Java版(2-26)-- 报时助手 **难度等级:普通****关键字:字符串 条件判断** 问题描述: 给定当前的时间,请用英文的读法将它读出来.时间用时h和分m表示,在英文 ...

  10. Python Tkinter——数字拼图游戏详解版

    Python Tkinter 实践系列--数字拼图游戏详解版 import random #Python中的random是一个标准库用于生成随机数.随机整数.还有随机从数据集取数据. import t ...

最新文章

  1. Boost库实现线程池学习及线程实现的异步调用
  2. 类继承(c++细节篇六)
  3. c语言形参指针 实参数组,《C语言程序设计》中的指针形参和函数体中数组实参问题的教学研究.pdf...
  4. 波形包络提取与峰值提取_一个简单的波形包络提取算法
  5. JEE_Ajax技术
  6. Java 集合系列06之 Vector详细介绍(源码解析)和使用示例
  7. 浅谈iOS中的蓝牙技术(二) CoreBluetooth
  8. 【POJ 3062】Party(2-SAT、tarjan)
  9. 诺顿5月17日病毒库误报,导致系统文件被删除
  10. 各类型商户微信认证方法
  11. ftp服务器设置上文件大小,ftp服务器文件上传大小设置
  12. 微信支付-超详细java开发-小程序对接
  13. pmp考试多长时间出成绩?
  14. lucene相关资料
  15. 【单片机仿真】(六)寻址方式 — 变址寻址与相对寻址
  16. python实现直方图、条形图、折线图、饼图(参数详情)
  17. 如何用 putty 连接远程 Linux 系统
  18. 2019年5月17日A股暴跌行情思考
  19. c语言实现天气预报步骤,天气预报的制作流程
  20. 又遇www.9348.cn劫持IE浏览器

热门文章

  1. 学python买什么书-Python爬虫入门看什么书好 小编教你学Python
  2. python3入门代码-Python3 教程 | 菜鸟教程
  3. 用深度学习进行语音识别为什么还要算mfcc?
  4. HTK语音识别示例(Ubuntu)
  5. 11个程序员最常犯的MySQL错误(PHP开发)
  6. makefile obj文件路径_makefile中包含的文件的路径
  7. sap 双计量单位_[原创]浅谈MM模块的双计量单位(二)
  8. python爬虫爬取多个页面_Python爬虫笔记:爬取单个页面
  9. python turtle画熊猫人_Python 使用turtle插件,画小猪佩奇
  10. 【动态规划笔记】01背包问题及优化