利用三者取中法改进快速排序,具体内容如下

实现取数组中第一个,中间和最后一个元素的中间元素作为划分元素(否则将这些元素排除在划分过程之外).大小为11或更小的数组在划分过程中被忽略,然后使用插入排序来完成排序.

#include

#include

#include

#include

#include

#include

using namespace std;

#define OK 1

#define ERROR -1

#define TRUE 1

#define FALSE 0

typedef int Status;

//输出函数

void Print(int a[], int l, int r)

{

int i;

for(i = l; i <= r; i++)

{

printf("%d ", a[i]);

}

printf("\n");

}

//插入排序的改进

void Insertion(int a[], int l, int r)

{

int i, j;

//循环找到数组中的最小值

for(i = r; i > l; i--)

{

if(a[i-1] > a[i])

{

swap(a[i-1], a[i]);

}

}

//由于上面的循环,a[0]a[1]已经有序

for(i = l+2; i <= r; i++)

{

int temp = a[i];

j = i;

//此时a[j]的位置已被记录

//while循环比较进行移位操作

while(temp < a[j-1])

{

a[j] = a[j-1];

j--;

}

//将记录下的值放到应当的位置

a[j] = temp;

}

}

//划分函数

int partion(int a[], int left, int right)

{

//取最右边的元素作划分元素

int temp = a[right];

//记录 i = left, j = right

int i = left, j = right-1;

//循环直到左右指针相遇

while(true)

{

//从左边开始扫描,当出现比划分元素大的元素,扫描停止

while(temp > a[i])

{

i++;

}

//从右边进行扫描,当出现比划分元素小的元素,扫描停止

while(temp < a[j] && j >= left)

{

j--;

}

//如果 i >= j, 循环截止,下面的交换不执行

if(i >= j) break;

//交换停止时的元素

swap(a[i], a[j]);

}

//交换该元素与划分元素

swap(a[i], a[right]);

//printf("i = %d\n", i);

//Print(a, 0, 6);

//划分过程结束

return i;

}

void qsort(int a[], int left, int right)

{

int i;

if(right-left <= 10)

return;

swap(a[(left+right)/2], a[right-1]);

if(a[left] > a[right-1])

swap(a[left], a[right-1]);

if(a[left] > a[right])

swap(a[left], a[right]);

if(a[right] > a[right-1])

swap(a[right-1], a[right]);

i = partion(a, left+1, right-1);

qsort(a, left, i-1);

qsort(a, i+1, right);

}

void Sort(int a[], int left, int right)

{

qsort(a, left, right);

Insertion(a, left, right);

}

int main()

{

int a[12] = {2, 5, 3, 7, 6, 1, 4, 11, 8, 10, 9, 12};

//快速排序改进

printf("对0~11排序\n");

Sort(a, 0, 11);

Print(a, 0, 11);

return 0;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

c语言程序设计现代方法快速排序,C语言实现快速排序改进版相关推荐

  1. c语言程序设计:现代方法 勘误,C语言程序设计基础教程----勘误记录

    <C语言程序设计基础教程----勘误记录>由会员分享,可在线阅读,更多相关<C语言程序设计基础教程----勘误记录(4页珍藏版)>请在人人文库网上搜索. 1.程序设计基础教程C ...

  2. 《C语言程序设计-现代方法》 笔记

    本篇笔记参考了<C语言程序设计-现代方法>和浙大翁恺的C语言视频. 第1章 C语言概述 第2章 C语言基本概念 %f默认输出6个小数 在编译时,编译器用空格替代每条注释 一个数字,无小数点 ...

  3. C语言程序设计 现代方法(第2版)pdf

    下载地址: 网盘下载 内容简介  · · · · · · <C语言程序设计现代方法>最主要的一个目的就是通过一种"现代方法"来介绍C语言,实现客观评价C语言.强调标准化 ...

  4. C语言程序设计 现代方法(第2版)电子书pdf下载

    C语言程序设计 现代方法(第2版)下载链接: https://pan.baidu.com/s/1XIKYGAxGhRTscgibAj3kgQ 提取码获取方式:关注下面微信公众号,回复关键字: 1129

  5. knking著作的c语言课后答案,c语言程序设计现代方法

    C语言的经典之作 近10年来*好的一部C语言著作 讨论了标准C和C标准库的全部特性 强调软件工程和现代编程理念 突出工业界的**实践.实际经验和编程风格 已被包括哈佛大学.麻省理工学院.斯坦福大学等全 ...

  6. C语言程序设计知识必备pdf,c语言程序设计复习知识总结.pdf

    c语言程序设计复习知识总结 C 语言程序设计复习知识总结 孙亚飞 第一章软件工程概述及程序设计基础 1."冯-诺依曼"计算机 "存储程序原理" 一条计算机指令完 ...

  7. c语言程序设计 学生档案管理系统,C语言程序设计--班级档案管理系统.doc

    PAGE PAGE 2 C语言程序设计 课程名称 : C语言课程设计 设计题目: 班级档案管理系统 学生姓名: 学 号: 专业班级: 指导老师: 数学与信息技术学院 2011 年 11 月1日 说 明 ...

  8. 有n个学生选修了c语言程序设计这门课程,C语言程序设计报告—学生选修课程系统...

    <C语言程序设计报告-学生选修课程系统>由会员分享,可在线阅读,更多相关<C语言程序设计报告-学生选修课程系统(11页珍藏版)>请在人人文库网上搜索. 1.C语言程序设计学校: ...

  9. c语言程序设计实验13文件,C语言程序设计实验指导书

    C语言程序设计实验指导书 C 语言程序设计实验指导书 C 语言程序设计实验指导书 实验一:C语言的运行环境及运行 C 程序的方法(2 学时) 一.实验目的和要求:一.实验目的和要求: (1)了解所用的 ...

  10. 有n个学生选修了c语言程序设计这门课程,C语言程序设计报告学生选修课系统(18页)-原创力文档...

    C 语 言 程 序 设 计 学校: 学院: 班级序号: 学号: :姓名 指导老师: C语言程序设计报告 一.C语言课程设计的目的: 高级语言课程设计是学习完<高级语言程序设计>课程后进行的 ...

最新文章

  1. 让学生网络相互学习,为什么深度相互学习优于传统蒸馏模型?| 论文精读
  2. html 设置视频尺寸,如何使用CSS控制视频的宽高?
  3. SAP 电商云 Spartacus UI 里如何捕捉语言设置的更改
  4. 关于计算机英语阅读,一篇摘选的关于计算机的英语阅读材料,对大家的英语也许会有提高!...
  5. 用java创建一个单例模式,采用Java实现单例模式
  6. python画图哆啦a梦大作业_Python—turtle画图(哆啦A梦)
  7. JavaWeb框架之Struts2 ---- 系列学习
  8. 网盘源码php,PHP云盘网盘系统(PHP云盘源码工具)V1.1 免费版
  9. 425 Failed to establish connection.
  10. firefoxos gaia 开发环境
  11. 驰为 UBook XPro 平板 评测怎么样
  12. pytorch张量相乘matmul函数
  13. 嵌入式开发板如何自动登陆校园网实现上网
  14. android手机微信输入蓝色字体,微信彩色昵称怎么制作?微信个性蓝色昵称设置图文教程与方法...
  15. 固态硬盘之主控哪家强?
  16. Ubuntu server 18.04 服务器配置
  17. Android指南针之加速度传感器地磁传感器-android学习之旅(67)
  18. Allegro学习笔记
  19. 【整理】3dsMax烘焙纹理模糊
  20. 解决MySql数据库远程访问Access denied for user: xxx@%' to database ‘datatest’ 问题

热门文章

  1. maven pc配置要求_《使命召唤:黑色行动5》公开测试PC配置要求:推荐GTX970+i7
  2. xml生成2维码_MyBatis(2)之MyBatis-Generator最佳实践
  3. LinuX 硬盘分区细节详谈 【 整理至 LinuxSir BY FreeXploiT 】
  4. cadence导入dxf文件_Allegro中如何导入DXF文件
  5. 怎么实现hover_web前端CSS实现一个粒子动效的按钮
  6. 利用伸展树提高区间操作的性能
  7. python 循环指定次数_亮仔的Python之路Day7——Python循环语句
  8. php左侧菜单栏递归代码,js实现左侧菜单栏递归循环遍历
  9. css3禅密花园叫什么名字_新生儿起名:2021元旦出生男孩叫什么名字
  10. linphone-android移植