插入排序之表插入排序
1.表插入排序只是求得一个有序的链表,它是修改指针的值来代替移动记录,操作过程如下
2.但是这样只能进行顺序查找,不能进行随机查找,为了能实现有序表的折半查找,需要对记录进行重新排列。操作过程如下:
3.测试程序如下:
#include<iostream> #include<cstring> #include<algorithm> #include<cstdio> using namespace std; typedef struct xxx{int head;//头结点 int a[100];int next[100];//记录下一个元素的位置 int len;xxx(){head = 1;memset(next, 0, sizeof(next));}void outList(){for(int i=1; i<=len; ++i){cout<<a[i]<<" ";}cout<<endl;} }Listx; Listx Lx;void table_insertion_sort(){//表插入排序,相当于静态链表 for(int i=2; i<=Lx.len; ++i){int pre, p;for(p=Lx.head; p && Lx.a[p]<Lx.a[i]; pre=p, p=Lx.next[p]);if(p==0){Lx.next[pre] = i;} else if(p==Lx.head){Lx.next[i] = Lx.head;Lx.head = i;} else {Lx.next[pre] = i;Lx.next[i] = p;} }//输出for(int i=Lx.head; i; i = Lx.next[i]) cout<<Lx.a[i]<<" ";cout<<endl; }void arrang_table() {int p = Lx.head, q;for(int i=1; i<Lx.len; ++i){while(p < i) p = Lx.next[p];//第i个记录在表中的位置不应该小于 i,如果小于i,说明该元素已经被交换位置了,可以通过next继续寻找 q = Lx.next[p];//指向下一个节点 if(p!=i){//第p个元素应该在第i个位置 swap(Lx.a[i], Lx.a[p]);swap(Lx.next[i], Lx.next[p]);Lx.next[i] = p;//该元素之前的位置 p,指向被移走的记录,使得以后可由while循环找回 }p = q;}for(int i=1; i<=Lx.len; ++i) cout<<Lx.a[i]<<" ";cout<<endl; }int main() {int i;scanf("%d", &Lx.len);for(i=1; i<=Lx.len; i++)scanf("%d", &Lx.a[i]);table_insertion_sort();arrang_table();return 0; }
转载于:https://www.cnblogs.com/hujunzheng/p/4677484.html
插入排序之表插入排序相关推荐
- c语言 静态链表插入排序,数据结构 - 表插入排序 具体解释 及 代码(C++)
表插入排序 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24323125 表插入排序(List I ...
- c语言 静态链表插入排序,数据结构C语言版 表插入排序
西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...
- 插入排序:表折半插入
在前一篇插入排序:表插入中.我们用静态链表的存储方式.直接插入的策略,构建了一种新的插入排序算法:表插入. 有人可能会想到:相同是静态链表的形式,为什么不使用更高效的折半插入策略呢?这样的想法真的非常 ...
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
- 表插入排序算法及C语言实现(看了无师自通)
前面章节中所介绍到的三种插入排序算法,其基本结构都采用数组的形式进行存储,因而无法避免排序过程中产生的数据移动的问题.如果想要从根本上解决只能改变数据的存储结构,改用链表存储. 表插入排序,即使用链表 ...
- “神奇“的表插入排序算法
文章目录 示例代码 时间复杂度: 直接插入排序算法示例如下: 具体可参考书籍: End 说真的,表插入排序算法是我学习插入排序算法中最难理解的算法之一,特意来写博客记录一下,理解思路真的不会写(或许我 ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)...
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
- 数据结构笔记(三十六)-- 插入排序与直接插入排序
插入排序 插入排序就是将要排序的表分成有序表和无序表两个部分,在无序表中取一个元素,在有序表中找到其位置,然后将其插入到有序表中.这样的排序算法就是插入排序 一.插入排序的分类 直接插入排序 折半插入 ...
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...
最新文章
- 取代java_如何评价 Kotlin?未来是否会取代 Java?
- 用python画xy散点图-python使用Plotly绘图工具绘制散点图、线形图
- 扫描过程_PLC的循环扫描工作过程
- Linux时间子系统之二:表示时间的单位和结构【转】
- [SpringBoot2]ajax函数中data参数的数据设置方式
- Spring中DispacherServlet、WebApplicationContext、ServletContext的关系
- html提交表单使用python计算_教你使用Python实现新个税计算器
- 服务器重启导致无法启动MySQL
- 曲率多项式转换为直角坐标系
- SpringBoot maven项目如何打包进行发布?
- Hibernate ——二级缓存
- Java线程中断理解(interrupte)
- sift算法搭建(上半部,五,求二阶三阶黑塞矩阵的逆程序对比,c#实现)
- 震旦打印机打不开首选项
- 支付宝当面付扫码支付支付后不回调_【支付宝支付】支付宝手机网站支付流程...
- 网易云音乐java爬虫_Java爬取网易云音乐民谣并导入Excel分析
- java实现微信H5支付和回调的Demo源码
- 【Git】规范化 Git 提交信息 Commitizen
- 2022年起重机械指挥考试题及模拟考试
- ARM如何判断合法的立即数
热门文章
- Android自动化打包工具,利用Jenkins实现Android自动化打包
- 管理系统中计算机应用 重点章节,11年《管理系统中计算机应用》 第5章 重点要点.doc...
- pca主成分分析用matlab实现,PCA (主成分分析)详解 (写给初学者) 结合matlab
- docker kibana:7.14.2
- docker Gitlab14.5.0 初始化账号以及密码是什么呢?
- layui 单选项 点击显示与隐藏 很实用
- Hadoop集群安装部署_伪分布式集群安装_01
- Git 切换提交历史节点
- 国内各大音乐平台歌曲分享
- python time sleep和wait_Python和硒:driver.implicitly_wait()和time.sleep()之间的区别...