[C语言] 插入排序之直接插入排序的特性及实现
[C语言] 插入排序之直接插入排序的特性及实现
1、算法特性
直接插入是一种简单、稳定的插入排序方法,属于最为基础的排序方法之一。
其时间复杂度最好情况为O(n)、最差与平均情况为O(n²),空间复杂度为O(1)。
2、算法思路:
以升序排列为例,先设置一个临时变量存储将要移动的插入值,再将其与其之前的数据依次比较。当比较值比插入值大时,比较值后移一位,插入值继续向前检索;当比较值小于等于插入值时,插入值插入比较值的后一位。经过多轮循环便可以将所有数据排列有序。
3、实现代码
1 #include <stdio.h> 2 3 // 插入排序:直接插入 4 void insert_sort(int arr[],int len) 5 { 6 // 把下标为i的这个元素插入到前面 前面数组是有序 7 for(int i=1; i<len; i++) 8 { 9 // 记录要插入的值 往后移的过程会覆盖arr[i]的值 提前保存 10 int num = arr[i]; 11 // 循环比较 12 int j = 0; 13 for(j=i-1; j>=0; j--) 14 { 15 if(num < arr[j]) 16 { 17 arr[j+1] = arr[j]; // 把数据往后移 18 } 19 else // arr[j] >= num 插入的位置j+1 20 { 21 break; 22 } 23 } 24 if(j != i-1) 25 { 26 arr[j+1] = num; 27 } 28 } 29 } 30 31 void travel(int arr[],int len) 32 { 33 for(int i=0;i<len;i++) 34 { 35 printf("%d ",arr[i]); 36 } 37 printf("\n"); 38 } 39 40 int main() 41 { 42 int arr[] = {53,82,9,233,43,14,55,9,4,67}; 43 int len = sizeof(arr)/sizeof(arr[0]); 44 45 travel(arr,len); 46 insert_sort(arr,len); 47 travel(arr,len); 48 49 /* travel(arr,len); 50 binary_insert_sort(arr,len); 51 travel(arr,len);*/ 52 53 /* travel(arr,len); 54 shell_sort(arr,len); 55 travel(arr,len);*/ 56 }
4、测试结果
转载于:https://www.cnblogs.com/usingnamespace-caoliu/p/9427758.html
[C语言] 插入排序之直接插入排序的特性及实现相关推荐
- 数据结构源码笔记(C语言):希尔插入排序
//实现希尔插入排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; ty ...
- 数据结构源码笔记(C语言):直接插入排序
//实现直接插入排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)...
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
- 排序算法(一)--插入排序法折半插入排序法
约定: 假设数据中有n个数据元素(关键字).排列算法中,将序列中各关键字值依次存放于类型为keytype的数组元素K[1], K[2], K[3], -, K[n]中. 排序结果按照数据元素(关键字) ...
- 数据结构笔记(三十六)-- 插入排序与直接插入排序
插入排序 插入排序就是将要排序的表分成有序表和无序表两个部分,在无序表中取一个元素,在有序表中找到其位置,然后将其插入到有序表中.这样的排序算法就是插入排序 一.插入排序的分类 直接插入排序 折半插入 ...
- java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...
- 一种语言 适合任何时候使用 — Haxe特性杂谈
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 这个世界 ...
- c语言插入排序算法_插入排序算法,流程图和C,C ++代码
c语言插入排序算法 In the last article, we discussed about the bubble sort with algorithm, flowchart and code ...
最新文章
- 使用PHPStorm 配置自定义的Apache与PHP环境
- MySQL学习笔记(5)之数据定义类型
- golang 读取文件
- mybatis一级缓存导致sql查询出现问题
- BZOJ4381[POI2015]Odwiedziny——分块+长链剖分
- JMeter:报错(Content type 'text/plain;charset=UTF-8' not supported)
- ssh(Spring+Spring mvc+hibernate)——DeptServiceImpl.java
- Modbus协议栈应用实例之一:Modbus RTU主站应用
- python字符串反转方法_Python程序使用堆栈和反转方法反转字符串
- MATLAB基础学习笔记02:掌握MATLAB运算
- linux临时网络配置
- 游戏筑基开发之结构体定义动态数组及常见问题(C语言)
- 微软将Silverlight主要定位在Windows Phone,其他平台更多推向HTML5
- java 调用谷歌翻译API(直接可以使用)
- 测试用例设计方法——等价类划分法
- C++setw函数的运用
- [PTA]实验5-6 使用函数判断完全平方数
- python 3d pca_python – matplotlib中的3D PCA:如何添加图例?
- php微博批量管理工具,简单快速批量取消微博的关注
- css3,环绕圆环 loading,小组件
热门文章
- Python基础之迭代器
- SVM中引入拉格朗日对偶理解
- [深度学习]为什么梯度反方向是函数值下降最快的方向?
- matlab error函数_深度对比Python(Numpy,Scipy)与Matlab的数值精度
- 【图像处理】透视变换 Perspective Transformation(含续加部分)
- 自适应关于帧场编码问题
- 计算机暑期实践相关内容,计算机暑假社会实践报告5000范文
- A. The Miracle and the Sleeper(水题)
- STM32- 定时器的设定 - 二元一次方程的因素分解求解实现PWM和定时器频率的小数位 - Matlab 方法:
- c语言大学期末考试题及答案,大学C语言期末考试题4及答案