直接插入排序
来源:互联网 发布:java时间相减 编辑:程序博客网 时间:2024/05/16 17:39
匈牙利大学Sapientia插入排序算法舞蹈:http://t.cn/hros0W
直接插入排序:
设置两个变量i和j,i初始化为数组的第二个元素,temp为i指向的值,j每次循环初始化为i的前一个元素,然后将i指向的值temp和j指向的值比较,如果大于j指向的值,j--,继续和j指向的值比较,如果小于j指向的值,将j指向的值放入j+1的位置,然后j--,继续向前比较,直到J的循环结束,然后将temp放入j+1的位置。开始i的下一轮循环。
数组:1 5 7 3 2
下标:0 1 2 3 4
j i
i指向当前遍历的元素
temp为i指向的值
j每次循环初始化为i的前一个元素
(1)记录i指向的值,为temp,temp=5,和它之前的数比较,5大于1,i++,继续向后遍历
数组:1 5 7 3 2
下标:0 1 2 3 4
j i
(2)i指向7,temp为7,temp和5比较7大于5,j--,j指向1,7大于1,循环结束,i++,向后遍历
数组:1 5 7 3 2
下标:0 1 2 3 4
j i
(3)temp为3,3和7进行比较,3小于7,让7放入j+1的位置变为1 5 7 7 2,j--指向5
temp和5比较,3小于5,让5放入7的位置,即j的后一个位置(j+1),数组为 1 5 5 7 2,j--指向1
temp和1比较,3大于1,j--=0循环结束
将temp的值放入j+1的位置,j+1=1,数组为1 3 5 7 2
i++
数组:1 3 5 7 2
下标:0 1 2 3 4
j i
(4)i指向2,temp=2,temp和7比较,小于7,7放入j+1的位置为1 3 5 7 7,j--
temp和5比较,小于5,5放入j+1的位置为1 3 5 5 7,j--
temp和3比较,小于3,3放入j+1的位置为1 3 3 5 7,j--
temp和1比较,大于1,直接j--=0,循环结束
将temp的值放入j+1的位置为 1 2 3 5 6
排序结束
插入排序的时间复杂度:O(n^2)
#include <iostream>using namespace std;//直接插入排序void InsertSort(int * data,int length){if(data==NULL||length<=0)return;for(int i=1;i<length;i++){int temp=data[i];for(int j=i-1;j>=0&&temp<data[j];j--){data[j+1]=data[j];}data[j+1]=temp;}}int main(){int data[]={1,3,7,5,2};InsertSort(data,5);for(int i=0;i<5;i++){cout<<data[i]<<endl;}return 0;}
- 插入排序--直接插入
- 插入排序------直接插入
- 插入排序---直接插入
- 排序:直接插入排序
- 排序---直接插入排序
- 排序 -- 直接插入排序
- 排序---直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序:直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 插入排序--直接插入排序
- 插入排序-直接插入排序
- 杂谈!-----本人
- ubuntu安装和配置SVN
- LayoutInflater
- iOS 获取Interface Builder上的子控制器的两种方式
- hdu 5228 ZCC loves straight flush
- 直接插入排序
- Rust 编程语言
- 网络编程学习笔记--1.socket可读可写条件
- DeepLearning (四) 基于自编码算法与softmax回归的手写数字识别
- iOS8 本地通知使用方法
- 【机房重构】——UML图类图
- 使用Ant自动签名、打包Android apk并且自动安装到手机
- NDK开发环境搭建
- Javaweb开发JSP+servelet实现多按钮功能