排序详解:直接插入排序
来源:互联网 发布:sql书写规范 编辑:程序博客网 时间:2024/06/06 06:55
直接插入排序,指每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。具体方法是第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。它是由两层嵌套循环组成的,外层循环标识并决定待比较的数值,内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。
简单来说,就是每次选择一个元素,将其放入有序序列中。(n-1)次操作之后,整个数组就已有序。
eg:
6 8 5 7 1 2 4 3
6|8 5 7 1 2 4 3
6 8|5 7 1 2 4 3
5 6 8|7 1 2 4 3
5 6 7 8|1 2 4 3
1 5 6 7 8|2 4 3
1 2 5 6 7 8|4 3
1 2 4 5 6 7 8|3
1 2 3 4 5 6 7 8
整个排序结束,看起来是【n-1】次操作,但是在每次插入的过程中需要从头重新遍历,实际上的应该是n*n级别的操作。
所以,直接插入排序是n*n级别时间复杂度的排序方法,隶属于插入排序,隶属于内部排序。
代码实现:
#include <stdio.h>#include<iostream>using namespace std;void InsertSort(int R[], int n){ int i, j; int temp; for (i = 1; i < n; ++i) { temp = R[i]; j = i - 1; while (j >= 0 && R[j] > temp) { R[j + 1] = R[j]; --j; } R[j + 1] = temp; }}int main(){ int a; int b[7] = { 22,12,16,2,11,44,55 }; InsertSort(b, 7); for (a = 0; a < 7; a++) { printf("%d\n", b[a]); } system("pause"); return 0;}
阅读全文
0 0
- 详解直接插入排序
- 排序详解:直接插入排序
- 直接插入排序算法详解
- 排序:直接插入排序
- 排序---直接插入排序
- 排序 -- 直接插入排序
- 排序---直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序:直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 插入排序--直接插入
- 插入排序------直接插入
- springMVC的工作原理
- SSH--hibernateTemplate通过Criteria、Restrictions条件限制查询
- HDU 4734 F(x) 数位dp
- java文件路径中的/与\\
- tensorflow: variable的值 与 variable.read_value()的值 区别
- 排序详解:直接插入排序
- PHP的可变变量名的使用方法分享
- Oracle---存储结构
- Ethereum Virtual Machine (EVM)
- spring的MVC执行原理
- QQ空间、新浪微博、腾讯微博等一键分享API链接代码
- mysql增删
- Ajax和Flash的区别
- httpservletrequest和httpservletresponse的理解