七大排序之插入排序
时间:2020-05-28
本文章向大家介绍七大排序之插入排序,主要包括七大排序之插入排序使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
做法;将无序序列插入到有序序列中;
结论:插入排序在什么情况下效率高: 【1】如果序列基本有序的情况下【2】插入排序时候数据序列比较少。
例子: 3 1 4 2 5 共五个数字. length=5;
【1】第一步先将序列分为有序序列和无序序列
有序:3
无序:1 4 2 5
【2】将无序序列插入到有序序列中,所以外层循环变量i应该从下标为1的1开始到下标为4的值为5结束;
for (int i = 1; i < length; i++)
【3】将arr[i]与arr[i-1]比较,如果arr[i]<arr[i-1],将arr[i]保存至临时变量temp中,此时进入内层循环;
if (arr[i - 1] > arr[i]) { int temp = arr[i];
【4】定义内层循环k,k初始化为i的前一个值即:k=i-1,(k>=0),将保存下来的temp值与arr[k]比较,若temp值小,则将arr[k](即arr[i])的位置被arr[k]重写覆盖,此时k--,再比较arr[k]与temp的值,若temp小则将arr[k+1]=arr[k],依次下去,直到arr[k]<temp值,将temp值重写进arr[k+1]中。
1 if (arr[i - 1] > arr[i]) { 2 int temp = arr[i]; 3 int k = i - 1; 4 for (; k >= 0 && arr[k] > temp; k--) { 5 arr[k + 1] = arr[k]; 6 } 7 arr[k + 1] = temp; 8 }
整体实现代码:
1 #include<iostream> 2 #include<time.h> 3 #include<stdlib.h> 4 #include<sys/timeb.h> 5 using namespace std; 6 const int Max = 10; 7 8 void swap(int& a, int& b) { 9 int temp = a; 10 a = b; 11 b = temp; 12 } 13 14 long getSystemTime() { 15 struct timeb tb; 16 ftime(&tb); 17 return tb.time * 1000 + tb.millitm; 18 } 19 void Print(const int* arr, int length) { 20 for (int i = 0; i < length; i++) { 21 cout << arr[i] << " "; 22 } 23 } 24 void InsertSort(int * arr,int length) { 25 for (int i = 1; i < length; i++) { 26 if (arr[i - 1] > arr[i]) { 27 int temp = arr[i]; 28 int k = i - 1; 29 for (; k >= 0 && arr[k] > temp; k--) { 30 arr[k + 1] = arr[k]; 31 } 32 arr[k + 1] = temp; 33 } 34 } 35 } 36 int main() { 37 int arr[Max]; 38 srand((unsigned)time(NULL)); 39 for (int i = 0; i < Max; i++) { 40 arr[i] = rand() % Max; 41 } 42 cout << "排序前:\n"; 43 Print(arr, Max); 44 long pt = getSystemTime(); 45 InsertSort(arr, Max); 46 long at = getSystemTime(); 47 cout << "\n排序后:\n"; 48 Print(arr, Max); 49 50 cout << "\ntime of sort:" << at - pt << "ms\n"; 51 52 53 return 0; 54 }
原文地址:https://www.cnblogs.com/jibisheng/p/12981125.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python时间序列选择波动率预测指数收益算法分析案例
- Linux 常用系统工作命令-date
- R使用LASSO回归预测股票收益
- Linux 常用系统工作命令-reboot、poweroff、wget
- Node.js + Socket.io 实现一对一即时聊天
- Linux 常用系统工作命令-ps、top
- Python之LDA主题模型算法应用
- R语言highfrequency高频金融数据导入
- IIS配置优化
- R语言做复杂金融产品的几何布朗运动的模拟
- R语言数据的收益率和可能的波动性交易
- 哈希算法的设计要点及应用场景
- R语言通过WinBUGS对MGARCH和MSV模型进行贝叶斯估计和比较
- Spring Boot中使用 Swagger2 自动构建API文档
- dotNET:怎样处理程序中的异常(理论篇)?