c语言程序设计现代方法快速排序,C语言实现快速排序改进版
利用三者取中法改进快速排序,具体内容如下
实现取数组中第一个,中间和最后一个元素的中间元素作为划分元素(否则将这些元素排除在划分过程之外).大小为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语言实现快速排序改进版相关推荐
- c语言程序设计:现代方法 勘误,C语言程序设计基础教程----勘误记录
<C语言程序设计基础教程----勘误记录>由会员分享,可在线阅读,更多相关<C语言程序设计基础教程----勘误记录(4页珍藏版)>请在人人文库网上搜索. 1.程序设计基础教程C ...
- 《C语言程序设计-现代方法》 笔记
本篇笔记参考了<C语言程序设计-现代方法>和浙大翁恺的C语言视频. 第1章 C语言概述 第2章 C语言基本概念 %f默认输出6个小数 在编译时,编译器用空格替代每条注释 一个数字,无小数点 ...
- C语言程序设计 现代方法(第2版)pdf
下载地址: 网盘下载 内容简介 · · · · · · <C语言程序设计现代方法>最主要的一个目的就是通过一种"现代方法"来介绍C语言,实现客观评价C语言.强调标准化 ...
- C语言程序设计 现代方法(第2版)电子书pdf下载
C语言程序设计 现代方法(第2版)下载链接: https://pan.baidu.com/s/1XIKYGAxGhRTscgibAj3kgQ 提取码获取方式:关注下面微信公众号,回复关键字: 1129
- knking著作的c语言课后答案,c语言程序设计现代方法
C语言的经典之作 近10年来*好的一部C语言著作 讨论了标准C和C标准库的全部特性 强调软件工程和现代编程理念 突出工业界的**实践.实际经验和编程风格 已被包括哈佛大学.麻省理工学院.斯坦福大学等全 ...
- C语言程序设计知识必备pdf,c语言程序设计复习知识总结.pdf
c语言程序设计复习知识总结 C 语言程序设计复习知识总结 孙亚飞 第一章软件工程概述及程序设计基础 1."冯-诺依曼"计算机 "存储程序原理" 一条计算机指令完 ...
- c语言程序设计 学生档案管理系统,C语言程序设计--班级档案管理系统.doc
PAGE PAGE 2 C语言程序设计 课程名称 : C语言课程设计 设计题目: 班级档案管理系统 学生姓名: 学 号: 专业班级: 指导老师: 数学与信息技术学院 2011 年 11 月1日 说 明 ...
- 有n个学生选修了c语言程序设计这门课程,C语言程序设计报告—学生选修课程系统...
<C语言程序设计报告-学生选修课程系统>由会员分享,可在线阅读,更多相关<C语言程序设计报告-学生选修课程系统(11页珍藏版)>请在人人文库网上搜索. 1.C语言程序设计学校: ...
- c语言程序设计实验13文件,C语言程序设计实验指导书
C语言程序设计实验指导书 C 语言程序设计实验指导书 C 语言程序设计实验指导书 实验一:C语言的运行环境及运行 C 程序的方法(2 学时) 一.实验目的和要求:一.实验目的和要求: (1)了解所用的 ...
- 有n个学生选修了c语言程序设计这门课程,C语言程序设计报告学生选修课系统(18页)-原创力文档...
C 语 言 程 序 设 计 学校: 学院: 班级序号: 学号: :姓名 指导老师: C语言程序设计报告 一.C语言课程设计的目的: 高级语言课程设计是学习完<高级语言程序设计>课程后进行的 ...
最新文章
- 让学生网络相互学习,为什么深度相互学习优于传统蒸馏模型?| 论文精读
- html 设置视频尺寸,如何使用CSS控制视频的宽高?
- SAP 电商云 Spartacus UI 里如何捕捉语言设置的更改
- 关于计算机英语阅读,一篇摘选的关于计算机的英语阅读材料,对大家的英语也许会有提高!...
- 用java创建一个单例模式,采用Java实现单例模式
- python画图哆啦a梦大作业_Python—turtle画图(哆啦A梦)
- JavaWeb框架之Struts2 ---- 系列学习
- 网盘源码php,PHP云盘网盘系统(PHP云盘源码工具)V1.1 免费版
- 425 Failed to establish connection.
- firefoxos gaia 开发环境
- 驰为 UBook XPro 平板 评测怎么样
- pytorch张量相乘matmul函数
- 嵌入式开发板如何自动登陆校园网实现上网
- android手机微信输入蓝色字体,微信彩色昵称怎么制作?微信个性蓝色昵称设置图文教程与方法...
- 固态硬盘之主控哪家强?
- Ubuntu server 18.04 服务器配置
- Android指南针之加速度传感器地磁传感器-android学习之旅(67)
- Allegro学习笔记
- 【整理】3dsMax烘焙纹理模糊
- 解决MySql数据库远程访问Access denied for user: xxx@%' to database ‘datatest’ 问题
热门文章
- maven pc配置要求_《使命召唤:黑色行动5》公开测试PC配置要求:推荐GTX970+i7
- xml生成2维码_MyBatis(2)之MyBatis-Generator最佳实践
- LinuX 硬盘分区细节详谈 【 整理至 LinuxSir BY FreeXploiT 】
- cadence导入dxf文件_Allegro中如何导入DXF文件
- 怎么实现hover_web前端CSS实现一个粒子动效的按钮
- 利用伸展树提高区间操作的性能
- python 循环指定次数_亮仔的Python之路Day7——Python循环语句
- php左侧菜单栏递归代码,js实现左侧菜单栏递归循环遍历
- css3禅密花园叫什么名字_新生儿起名:2021元旦出生男孩叫什么名字
- linphone-android移植