插入法排序c语言程序,插入排序算法及C语言实现

插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。

直接插入排序是插入排序算法中的一种,采用的方法是:在添加新的记录时,使用顺序查找的方式找到其要插入的位置,然后将新记录插入。

很多初学者所说的插入排序,实际上指的就是直接插入排序算法,插入排序算法还包括2-路插入排序,表插入排序和

例如采用直接插入排序算法将无序表{3,1,7,5,2,4,9,6}进行升序排序的过程为:

首先考虑记录 3 ,由于插入排序刚开始,有序表中没有任何记录,所以 3 可以直接添加到有序表中,则有序表和无序表可以如图 1 所示:

81e5f86fc027606a6a2600cdac80391c.png

图 1 直接插入排序(1)

向有序表中插入记录 1 时,同有序表中记录 3 进行比较,1<3,所以插入到记录 3 的左侧,如图 2 所示:

0e25b6ebaf149080267946ef3320d678.png

图 2 直接插入排序(2)

向有序表插入记录 7 时,同有序表中记录 3 进行比较,3<7,所以插入到记录 3 的右侧,如图 3 所示:

6df0e225c70e0fdfadc9f58f47c4ba88.png

图 3 直接插入排序(3)

向有序表中插入记录 5 时,同有序表中记录 7 进行比较,5<7,同时 5>3,所以插入到 3 和 7 中间,如图 4 所示:

8deeecb4900b90c574398d5b0d8cef74.png

图 4 直接插入排序(4)

向有序表插入记录 2 时,同有序表中记录 7进行比较,2<7,再同 5,3,1分别进行比较,最终确定 2 位于 1 和 3 中间,如图 5 所示:

c59c67445b23f338dadfc398ad152c3d.png

图 5 直接插入排序(5)

照此规律,依次将无序表中的记录 4,9 和 6插入到有序表中,如图 6 所示:

6fd34b480e115d065bb66085c95a4607.png

图 6 依次插入记录4,9和6

直接插入排序的具体代码实现为:

#include

//自定义的输出函数

void print(int a[], int n ,int i){

printf("%d:",i);

for(int j=0; j<8; j++){

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

}

printf("\n");

}

//直接插入排序函数

void InsertSort(int a[], int n)

{

for(int i= 1; i

if(a[i] < a[i-1]){//若第 i 个元素大于 i-1 元素则直接插入;反之,需要找到适当的插入位置后在插入。

int j= i-1;

int x = a[i];

while(j>-1 && x < a[j]){ //采用顺序查找方式找到插入的位置,在查找的同时,将数组中的元素进行后移操作,给插入元素腾出空间

a[j+1] = a[j];

j--;

}

a[j+1] = x; //插入到正确位置

}

print(a,n,i);//打印每次排序后的结果

}

}

int main(){

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

InsertSort(a,8);

return 0;

}

运行结果为:

1:13752496

2:13752496

3:13572496

4:12357496

5:12345796

6:12345796

7:12345679

直接插入排序算法本身比较简洁,容易实现,该算法的时间复杂度为O(n2)。

插入排序的其它 4 种排序方法,在后序章节中有详细介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5分钟能回答的人,年薪25万美金以上

据说&#xff0c;在美国&#xff0c;5分钟能回答这道题的人&#xff0c;平均年薪25万美金以上&#xff0c;题目如下&#xff1a;5个海盗抢到了100颗宝石&#xff0c;每一颗都一样的大小和价值连城。他们决定这么分&#xff1a; 1&#xff0e; 抽签决定自己的号码&#xff08;1&…

【转】Microsoft Azure存储服务:存储账户****

在正式使用 Microsoft Azure 存储服务之前&#xff0c;你至少需要有一个 Azure 订阅并创建「存储账户」。Azure 订阅账户可以访问和使用各种 Azure 服务&#xff0c;在有了 Azure 订阅之后便可以开始创建「存储账户」并开始使用前面存储类型与访问中曾介绍过的 blobs、表&#…

大学c语言常用语句意思,C语言常用语句

.printf函数调用的一般printf函数是一个标准库函数&#xff0c;它的函数原型在头文件“stdio.h”中。但作为一个特例&#xff0c;不要求在使用 printf 函数之前必须包含stdio.h文件。printf函数调用的一般形式为&#xff1a;printf(“格式控制字符串”, 输出表列)其中格式控制字…

2004-4-3+ asp.net编程环境的配置

想要在本地机上编写并运行测试asp.net程序&#xff0c;必须要配置环境先&#xff08;……&#xff09;&#xff0c;下面就来研究一下这个问题。首先当然得有iis&#xff0c;这个似乎不用多说&#xff0c;添加/删除程序-安装windows组件-iis-插入2000或xp光盘-完成&#xff08;当…

vs c语言 多线程demo,一个多线程的Socket通信Demo(C语言实现)

-----------这是客户端程序--------------#include "stdio.h"#include "winsock2.h"#include "stdlib.h"#pragma comment(lib,"ws2_32")void main(){WSADATA wsaData;WSAStartup(MAKEWORD(2,2),&wsaData);SOCKET s socket(PF_INE…

【转】Azure Logic App Demo

使用Azure Logic App Azure Function 完成简单的业务流程 什么是Logic App Azure 逻辑应用提供了&#xff0c;用于在云中简化并实现可缩放的集成和工作流的方式。 它提供了可视化设计器&#xff0c;用于为流程建模并将流程作为一系列步骤&#xff08;称为工作流&#xff09;…

住宅的结构有哪些形式

住宅的结构有哪些形式住宅的结构是指住宅的承重骨架(如房屋的梁柱、承重墙等)&#xff0c;其作用是保证住宅在使用期限内&#xff0c;把作用在住宅上的各种荷载或作用力&#xff0c;可靠地承担起来&#xff0c;同时在保证住宅的强度、刚度和耐久性的情况下&#xff0c;把所有的…

c语言中如何用程序判断double型的浮点数能精确到几位小数,C语言中浮点数double/float相等判断...

#include #include /* fabs */#ifdef _WIN32// #include #endif//输出的数值不断递增&#xff0c;即使将10改成10.0&#xff0c;循环也没有中止&#xff0c;为什么&#xff1f;void test_float001(){double i;for(i0; i ! 10; i 0.1){printf("%.1f\n", i);#ifdef _W…

【转】Azure应用部署方式对比

如图 azure环境应用托管方式对比 1. app service serverless azure的app service支持几乎所有语言开发的web app&#xff0c;既可以手动使用publish profile部署&#xff0c;也可以使用vsts创建一个&#xff08;CDCI&#xff09;持续集成。都非常方便。 而azure的function app…

.Net下几种日志管理方法

.Net下几种日志管理方法 日志是应用程序中不可缺少的一部份&#xff0c;不仅可以记录应用程序的运行状态&#xff0c;还可以记录一些BUG&#xff0c;便于应用程序的更新与修改。在.Net有好几种方法可以对日志进行管理。1、数据库日志。2、文本日志。3、系统事件日志。 首先&…

c语言哪个方法称为程序大门,学会这8个经典小程序,就相当于跨入了C语言大门...

描述【程序1】题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f;1.程序分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。2.程序源代码&#x…

【转】无服务计算(Serverless Computing)核心知识

Serverless Computing概念 云原生计算基金会CNCF&#xff08;Cloud Native Computing Foundation, CNCF&#xff09;Serverless Whitepaper v1.0对无服务器计算作了如下定义&#xff1a; Serverless computing refers to the concept of building and running applications tha…

其他技术(Path)

其他技术-AV技术转载于:https://www.cnblogs.com/f4f16/archive/2006/08/27/487676.html

c语言中指数优化,西藏东财中证医药卫生指数C净值下跌1.96% 请保持关注

来源&#xff1a;金融界基金作者&#xff1a;机器君金融界基金08月07日讯 西藏东财中证医药卫生指数型发起式证券投资基金(简称&#xff1a;西藏东财中证医药卫生指数C&#xff0c;代码008552)公布最新净值&#xff0c;下跌1.96%。本基金单位净值为1.397元&#xff0c;累计净值…

PE文件结构详解(一)基本概念

&#xff08;一&#xff09;基本概念 PE&#xff08;Portable Execute&#xff09;文件是Windows下可执行文件的总称&#xff0c;常见的有DLL&#xff0c;EXE&#xff0c;OCX&#xff0c;SYS等&#xff0c;事实上&#xff0c;一个文件是否是PE文件与其扩展名无关&#xff0c;P…

把Excel文件中的数据读入到DataGrid中

使用Excel文件做为DataGrid的数据源是非常简单的&#xff0c;一旦数据被装载进来&#xff0c;就可以把数据再保存进SQL Server或XML中。我们只需要简单地使用OLE DB Provider 来访问Excel文件&#xff0c;然后返回DataSet即可。下面是要显示的Excel数据contact.xls&#xff1a;…

一行c语言代码,打钩的一行c语言代码解释一下,谢谢,详细解释绝对最佳

string strg Application.StartupPath.ToString();//F:\调试06\MrCy\MrCy\Data\mrcy.bak//获取当前启动位置strg strg.Substring(0, strg.LastIndexOf("\\")); //取得当前启动位置的上一级目录strg strg.Substring(0, strg.LastIndexOf("\\")); //取得当…

【转】.NET平台开发Mongo基础知识

NoSQL简介 NoSQL相关的技术最近越来越受欢迎&#xff0c;Mongo本身就是基于NoSQL实现的。关于NoSQL你需要了解 什么是NoSQLNoSQL和传统的关系型数据库有什么区别NoSQL的优缺点 这几个问题下面的文章有所介绍&#xff1a; http://www.runoob.com/mongodb/nosql.html http://…

web开发常用js功能性小技巧(转)

web开发常用js功能性小技巧 -------------------------------------------------------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">; <HTML>; <HEAD>; <TITLE>; New Document </TITLE>…

android studio如何编译测试,Android Studio 进行单元测试完整教程

前言为了这个AndroidStudio的单元测试&#xff0c;从下午搞到晚上才搞明白咋操作。我学一个新知识总是那么坎坷&#xff0c;经历无数的错误路径&#xff0c;才可能找到正确的路在哪儿。我的AndroidStudio我的AndroidStudio是1.5.1版本&#xff0c;但是进行单元测试应该很早的版…