数据结构-排序进阶代码
1.插入排序中找插入位置的操作可以通过二分查找法来实现。请设计一个这样的改进的插入排序算法。
void InsertSort(int A[], int n){ //排序是A[0]~A[n]int i,j,low,high,mid;for(i=2;i<=n;i++){A[0]=A[i];low=1;high=i-1;while(low<=high){mid=(low+high)/2;if(A[mid]>A[0])high=mid-1; //查找左半子表elselow=mid+1 //查找右半子表}for(j=i-1;j>=high+1;--j)A[j+1]=A[j];A[high+1]=A[0];}
}
2.快速排序算法中,如何选取一个界值(又称为轴元素分割线),影响着快排的效率,且界值夜并不一定是被排序的序列中的一个元素。例如,我们可以用被排序的序列中所有元素的平均值作为界值。试编写一个算法实现以平均值为界值得快速排序算法。
void QuickSort(int A[], int n){QSort(A,0,n-1); //从数组下标为0开始排
}
void QSort(int A[],int left,int right){int i,j;if(left<right){int pivot=0; //界值for(i=left;i<=right;i++)pivot=pivot+A[i];pivot=pivot(right-left+1);i=left;j=right+1;do{do i++; while(A[i]<pivot&&i<=right);do j--; while(A[j]>pivot&&j>=left);if(i<j)Swap(A[i],A[j]);}while(i<j)Swap(A[left],A[j]);QSort(A,left,j);QSort(A,j+1,right);}
}
3.奇偶交换排序是另外一种交换排序。它的第一趟对序列中的所有奇数项i扫描,第二趟对序列中的所有偶数项i扫描。若A[i]>A[i+1],则交换他们。第三趟又对所有奇数项,第四趟对所有的偶数项,如此反复,直到整个序列全部排序好为止。
void odd-evenSort(int A[],int Size){int i,exchange;do{for(i=1;i<Size;i+=2)if(A[i]>A[i+1]){exchange=1;Swap(A[i],A[i+1]);}for(i=0;i<Size;i+=2)if(A[i]>A[i+1]){exchage=1;Swap(A[i],A[i+1]);}}while(exchage!=0)
}
4.设数组中存放了一个无序的关键字序列K0、K1、……..、Kn-1。现要将一指定的元素Ki放在该元素在排序之后的正确位置上(例如,对于序列23,12,8,45,38而言,元素23排序后应放在2号位,从0开始编号),试编写算法实现上述功能,要求比较次数不超过n。
void SetLoc(int K[],int n,int i){ //将下标为i的元素归为if(i<0||i>=n){cout<<”The index i is illegal”;return;}int seq=0;for(int j=0;i<n;j++)if(K[j]<k[i])seq++;Swap(K[i],K[seq]);
}
5.上题参考快排的思想
void SetLoc(int A[],int n,int i){int k=0,j=n+1; //排序为0~n,n后面是无穷大do{do k++; while(A[k]<A[i]);do j--;while(A[j]>A[i]);if(i<j) Swap(A[i],A[j]);}while(k<j);Swap(A[left],A[j]);
}
数据结构-排序进阶代码相关推荐
- 数据结构-排序基础代码
数据结构-排序基础代码 1.快排的递归算法: void QuickSort(int A[],int n){Qsort(A,0,n-1); } void Qsort(int A[],int left,i ...
- 中希尔排序例题代码_【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章...
码农有道 历史文章目录(请戳我) 关于码农有道(请戳我) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强烈建议先收藏然后 ...
- 数据结构-考研难点代码突破(C/C++/Java排序算法,性能及其稳定性分析(内部排序))
文章目录 1. 内部排序的基本种类 2. 插入排序 Ⅰ直接插入排序 性能与稳定性分析 Ⅱ 折半插入排序 性能与稳定性分析 Ⅲ 希尔排序 性能与稳定性分析 3. 交换排序 Ⅰ 冒泡排序 性能与稳定性分析 ...
- 数据结构-考研难点代码突破 (C++实现有向无环图的拓扑排序)
文章目录 1. AOV网 2. 拓扑排序 C++代码 1. AOV网 AOV网∶若用DAG 图(有向无环图)表示一个工程,其顶点表示活动,用有向边<Vi,Vj>表示活动 Vi必须先于活动V ...
- 数据结构与算法--代码鲁棒性案例分析
代码鲁棒性 鲁棒是robust的音译,就是健壮性.指程序能够判断输入是否符合规范,对不合要求的输入能够给出合理的结果. 容错性是鲁棒的一个重要体现.不鲁棒的代码发生异常的时候,会出现不可预测的异常,或 ...
- 中希尔排序例题代码_超全面分析十大排序算法
点击上方"零一视界",选择"星标"公众号 资源干货,第一时间送达 作者 | 不该相遇在秋天 责编 | 程序员小吴 前言 本文全长 14237 字,配有 70 张 ...
- java基数排序 数组_万字长文带你掌握Java数组与排序,代码实现原理都帮你搞明白!...
查找元素索引位置 基本查找 根据数组元素找出该元素第一次在数组中出现的索引 public class TestArray1 { public static void main(String[] arg ...
- 【数据结构排序算法系列】数据结构八大排序算法
排序算法在计算机应用中随处可见,如Windows操作系统的文件管理中会自动对用户创建的文件按照一定的规则排序(这个规则用户可以自定义,默认按照文件名排序)因此熟练掌握各种排序算法是非常重要的,本博客将 ...
- 数据结构—排序(第九章)
目录 1. 排序的基本概念与分类 1.1 排序的稳定性 1.2 内排序与外排序 1.3 排序用到的结构与函数 2. 冒泡排序 2.1 最简单排序实现 2.2 冒泡排序算法 2.3 冒泡排序优化 2.4 ...
最新文章
- 如何解决从数据库里面取出的时间晚了8个小时
- Linux下的编译(环境是centos6.8 gcc 4.4.7)
- WCF4.0进阶系列--第四章 保护企业内部的WCF服务(转)
- 【面试招聘】阿里、腾讯 | 算法岗面试复盘
- [Python图像处理] 三十二.傅里叶变换(图像去噪)与霍夫变换(特征识别)万字详细总结
- linux 不同ip 相同mac arp,linux – nmap和arp-scan不一致的IP-MAC结果
- 产品经理必须知道的一点知识:三种方法判断一个产品该不该做
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(python字典和集合)
- lc filter在matlab哪,基于python实现matlab filter函数过程详解
- Programe_Of_Beauty:2.14 求数组的子数组之和的最大值
- 【图像处理】一种低光照图像的亮度提升方法(Adaptive Local Tone Mapping Based on Retinex for High Dynamic Range Images)
- php 表单条件设置_PHP基础知识总结
- android camera(6)---camera2 拍照流程
- UI线框图模板素材实际应用好帮手
- oracle 12c pdb开启和关闭,及设置开机自启动
- python __globals__, __file__
- vue 生成二维码:vue-qr插件
- Vue:vue中axios发起http请求报错net::ERR_CERT_DATE_INVALID
- 应用程序的可视化图形引擎库控件Vectordraw Developer Framework
- SQLite不同插入方法的效率对比测试
热门文章
- openeim再被刺也忍着痛继续吃
- freeeim源码一个个投篮的命中
- string的飞鸽传书字符串缓冲区
- IOCP加Windows线程池打造高伸缩性高性能的服务器应用
- 本周Web2.0小工具推荐[2008-09-13]
- 经典面试题(50):以下代码将输出的结果是什么?
- android 浏览指定相册,Android -- 采用系统相册浏览指定路径下照片
- mysql union_Mysql union和union all用法
- php怎么获得产品id,php – 如何获取Woocommerce产品中的Variation ID
- blob没权限 ie_vuerouter 源码和动态路由权限分配