倒N字形排列java_Java排序8大算法实现
概述
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
我们这里说说八大排序就是内部排序。
当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。
快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
1.插入排序—直接插入排序(Straight Insertion Sort)
基本思想:
将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。
要点:设立哨兵,作为临时存储和判断数组边界之用。
直接插入排序示例:
如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。
算法的实现:
void print(int a[], int n ,int i){
cout<
for(int j= 0; j<8; j++){
cout<
}
cout<
}
void InsertSort(int a[], int n)
{
for(int i= 1; i
if(a[i]
int j= i-1;
int x = a[i]; //复制为哨兵,即存储待排序元素
a[i] = a[i-1]; //先后移一个元素
while(x
a[j+1] = a[j];
j--; //元素后移
}
a[j+1] = x; //插入到正确位置
}
print(a,n,i); //打印每趟排序的结果
}
}
int main(){
int a[8] = {3,1,5,7,2,4,9,6};
InsertSort(a,8);
print(a,8,8);
}
效率:
时间复杂度:O(n^2).
其他的插入排序有二分插入排序,2-路插入排序。
2. 插入排序—希尔排序(Shell`s Sort)
希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进。希尔排序又叫缩小增量排序
基本思想:
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
操作方法:
选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;
按增量序列个数k,对序列进行k 趟排序;
每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。
希尔排序的示例:
算法实现:
我们简单处理增量序列:增量序列d = {n/2 ,n/4, n/8 .....1}n为要排序数的个数
即:先将要排序的一组记录按某个增量d(n/2,n为要排序数的个数)分成若干组子序列,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。继续不断缩小增量直至为1,最后使用直接插入排序完成排序。
void print(int a[], int n ,int i){
cout<
for(int j= 0; j<8; j++){
cout<
倒N字形排列java_Java排序8大算法实现相关推荐
- 倒N字形排列java_Java实现n位数字的全排列
n位数字的全排列共有n!种. 本排列只对字符型数字排列进行输出,输出的是字符型数字.这种问题一般都需要用递归的方法. java代码如下: public class test { static int ...
- python实现倒n字形排列_Leetcode问题库——Z形变换(Python),补充X形变换,字形
Z字形变换 题目 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: 之后 ...
- vb内部排序7大算法
信息技术 VB程序整理 排序算法(以数组a(n)降序为例) 1.冒泡排序(Bubble Sort) 1.0 性质总结 1.1 基本思想 1.2 具体步骤 1.3 代码实现 1.4改进的冒泡排序 2.直 ...
- 计算机一级电子表格地区排名,玩转Excel电子表格排序方法大汇总
玩转Excel电子表格排序方法大汇总 分类:计算机等级 | 更新时间:2016-07-08| 来源:转载 排序是数据处理中的经常性工作,Excel排序有序数计算(类似成绩统计中的名次)和数据重排两类. ...
- 万字呕心沥血排序配图大总结
今天肝篇万字长文 目录 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3 常见的排序算法 2.常见排序算法的实现 2.1 插入排序 2.1.1基本思想 2.1.2直接插入排序 2.1 ...
- 程序员必知8大排序3大查找(三)
前两篇 <程序员必知8大排序3大查找(一)> <程序员必知8大排序3大查找(二)> 三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表(以后谈) 一.顺序查找的基 ...
- R语言使用ggpubr包的ggdotplot函数可视化水平棒棒糖图(自定义分组数据点色彩、自定义调色板、在两端添加点图的线段segments、整体排序从大到小、自定义数据点的大小、添加数值标签)
R语言使用ggpubr包的ggdotplot函数可视化水平棒棒糖图(自定义分组数据点色彩.自定义调色板.在两端添加点图的线段segments.整体排序从大到小.自定义数据点的大小.添加数值标签) 目录
- python选择排序从大到小_经典排序算法和Python详解之(一)选择排序和二元选择排序...
本文源自微信公众号[Python编程和深度学习]原文链接:经典排序算法和Python详解之(一)选择排序和二元选择排序,欢迎扫码关注鸭! 扫它!扫它!扫它 排序算法是<数据结构与算法>中最 ...
- 【GIF动画+完整可运行源代码】C++实现 选择排序——十大经典排序算法之二
十大经典排序算法系列博客-->传送门 选择排序是一种简单直观的排序算法,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的 ...
最新文章
- RDKit:计算不同小分子构象之间的RMSD
- 软件测试培训 高级测试/测试开发基本技能列表
- RocketMQ(五):教你如何调试源代码
- Android如何使用API
- 前端学习(1903)vue之电商管理系统电商系统之调用api添加用户
- Lifewire文档阅读笔记-如何使用IP地址找对应的MAC地址
- Jsp使用Cookie完成记住账号密码的功能
- python 比较文件不同,在python中逐行比较两个不同的文件
- 高数 | 旋转体体积计算方法汇总、二重积分计算旋转体体积
- 线段树+平衡树(STL) 勤快的love 枫
- word论文排版和写作04:用MathType和word公式编辑器插入数学公式
- js获取当前时间(标准时间)
- TPshop项目步骤(二)
- 计算机毕业设计Java城市智能公交系统(源码+系统+mysql数据库+lw文档)
- Paper reading (二十二):Integrated omics: tools, advances and future approaches
- 【2D多目标跟踪】Quasi-Dense Similarity Learning for Multiple Object Tracking阅读笔记
- 图表嵌入到数据表格下方_在excel图表下方添加数据表 excel图表添加数据表
- docker安装calibre打造数字图书馆: 在线管理pdf等电子图书
- Kalman Filter 通俗讲解
- 硬件路由转发原理浅析-清晨补充
热门文章
- 全流分析取证:高级威胁哪里跑?!
- 填补服务机器人市场空白,九号机器人提供智能服务场景解决方案!
- 「拨云见日」英特尔揭秘短视频背后的二三事
- ajax,jsonp,axios面试题
- java 不能使用foreach_为什么我不能在Java Enumeration上使用foreach?
- 查看topic信息_如何规划的你博客文章主题(Topic)
- redhat 6.5怎么安装mysql5.6_centos 6.5安装mysql5.6
- cups支持的打印机列表_网络存储让你的打印机瞬间变无线,打印文件不用愁
- android应用控制百度地图,Android中应用百度地图API开发地图APP实例-显示百度地图...
- elasticsearch-7.15.2 同时支持中文ik分词器和pinyin分词器