博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Algorithm】插入排序
阅读量:4314 次
发布时间:2019-06-06

本文共 2345 字,大约阅读时间需要 7 分钟。

一. 算法描述

  插入排序具体算法描述如下:

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2~5

  举个例子:5 7 6 4 3 8

  第一趟:5 7 6 4 3 8  =》5 7 6 4 3 8

  第二趟:5 7 6 4 3 8  =》5 6 7 4 3 8

  第三趟:5 6 7 4 3 8  =》4 5 6 7 3 8

  第四趟:4 5 6 7 3 8  =》3 4 5 6 7 8

  第五趟:3 4 5 6 7 8  =》3 4 5 6 7 8

三. 算法实现

  算法实现1

/** author:Knife* time:2014.06.13 16:07* Algorithm:插入排序(从前向后查找)*/#include
void main_insertSort(){ int intArr[] = {
8,3,6,4,2,9,5,4,1,7}; int n = sizeof(intArr)/sizeof(intArr[0]); // 计算整型数组的长度 int i,j,k,tmp; for(i = 1; i < n; i++){ for( j = 0; j < i; j++){ if(intArr[i] < intArr[j]){ // 插入位置j tmp = intArr[i]; for(k = i; k>j; k--){ intArr[k] = intArr[k-1]; } intArr[j] = tmp; // 插入 } } } // 打印输出 for(i=0; i

  算法实现2

/** author:Knife* time:2014.06.13 16:07* Algorithm:插入排序(从后向前查找)*/#include
void main_1(){ int intArr[] = {
8,3,6,4,2,9,5,4,1,7}; int n = sizeof(intArr)/sizeof(intArr[0]); // 计算整型数组的长度 int i,j,tmp; //插入排序 for(i = 1; i < n; i++){ tmp = intArr[i]; j = i-1; while(j>=0 && (tmp < intArr[j])){ // 插入位置 intArr[j+1] = intArr[j]; j--; } intArr[j+1] = tmp; // 插入操作 } // 打印输出 for(i=0; i

  算法实现3

#include
/** author:Knife* time:2014.06.13 16:43* Algorithm:插入排序(二分查找)*/void main(){ int intArr[] = {
8,3,6,4,2,9,5,4,1,7}; int n = sizeof(intArr)/sizeof(intArr[0]); // 计算整型数组的长度 int i,j,low,high,mid,temp; for(i = 1; i < n; ++i){ low = 0; high = i-1; while(low <= high){ //使用二分查找,寻找插入的位置 mid = low + ((high-low) >> 1); //这种写法,有效避免溢出 if(intArr[i] > intArr[mid]){ low = mid + 1; }else{ high = mid - 1; } } temp = intArr[i]; for(j = i; j > low; j--){ //移动元素 intArr[j] = intArr[j-1]; } intArr[low] = temp; //在合适位置,插入。这里为什么是 low? 得仔细想想(答案参考文献[2])! } // 打印输出 for(i = 0; i < n; i++){ printf("%d ",intArr[i]); } printf("\n");}

四. 算法分析

  • 平均时间复杂度:O(n^2)
  • 空间复杂度:O(1)  (用于记录需要插入的数据)
  • 稳定性:稳定

参考资料

[1] 

[2] 

转载于:https://www.cnblogs.com/ningvsban/p/3787560.html

你可能感兴趣的文章
表达式求值-201308081712.txt
查看>>
centos中安装tomcat6
查看>>
从Vue.js窥探前端行业
查看>>
学习进度
查看>>
poj3368 RMQ
查看>>
“此人不存在”
查看>>
github.com加速节点
查看>>
解密zend-PHP凤凰源码程序
查看>>
python3 序列分片记录
查看>>
Atitit.git的存储结构and 追踪
查看>>
atitit 读书与获取知识资料的attilax的总结.docx
查看>>
B站 React教程笔记day2(3)React-Redux
查看>>
找了一个api管理工具
查看>>
C++——string类和标准模板库
查看>>
zt C++ list 类学习笔记
查看>>
git常用命令
查看>>
探讨和比较Java和_NET的序列化_Serialization_框架
查看>>
1、jQuery概述
查看>>
数组比较大小的几种方法及math是方法
查看>>
FTP站点建立 普通电脑版&&服务器版
查看>>