数据结构之插入排序
来源:互联网 发布:数据库 文件系统 编辑:程序博客网 时间:2024/06/05 09:39
1 、插入排序的详解
从第二个数字开始插入在之前的有有序系列中,直到末尾。
比如有个数组 int a[5] = {2, 5, 3, 1, 4};
第 一次排序为:2, 5 ,3,1, 4
第二次排序为: 2, 3, 5, 1, 4
第三次排序为: 1, 2, 3, 5, 4
第四次排序为: 1, 2, 3, 4, 5
2、代码实现
#include<stdio.h>void insert_sort(int *a, int length);void printf_int(int *a, int length);int main(){ int a[10] = {2, 5, 6, 7, 9, 1, 3, 4, 10, 9}; int length = sizeof(a)/sizeof(a[0]); int b[4] = {2, 5, 3, 1}; int length1 = sizeof(b)/sizeof(b[0]); printf("length1 is %d\n", length1); insert_sort(a, length); printf_int(a, length); insert_sort(b, length1); printf_int(b, length1); return 0;}void insert_sort(int *a, int length){ for (int i = 1; i < length; i++) { int last = a[i]; int j = i-1; while(j >= 0 && a[j] > last) { /*注意向后移动不是j++,是j+1,以后不要搞错了*/ a[j + 1] = a[j]; j--;/*要得--,不然死循*/ } a[j + 1] = last; }}void printf_int(int *a, int length){ for (int i = 0; i < length; i++ ) { printf("%d\t", a[i]); } printf("\n");}
3、展示结果
length1 is 4123456799101235
4、总结
1 、需要知道第一次循环是数组长度减1
2、我们要记得在插入数据和之前数据的关系,插入数据之前的数据坐标是插入数据的坐标减一,不要在从新定义下表,增加复杂性,能关联就关联
3、然后我们需要找到循环的条件,即插入的数据和之前的数据进行对比,当然下表必须大于0
4、要记得j--,不然就是死循环了
5、用的比较巧妙,如果不进入循环,我们对数据不做处理,先得到插入数据last 然后j = i -1;然后最后又是a[j + 1]这样数据就复原了,切忌。
0 0
- 数据结构之 插入排序
- 数据结构之插入排序
- 数据结构之插入排序
- 数据结构之插入排序
- 数据结构之插入排序
- 数据结构之插入排序
- 《数据结构--排序》之插入排序
- 数据结构--排序之插入排序
- 数据结构排序之插入排序
- 数据结构排序之插入排序
- 数据结构之直接插入排序
- 数据结构之 直接插入排序
- 数据结构之 折半插入排序
- 数据结构之直接插入排序
- java数据结构之插入排序
- 数据结构之直接插入排序
- 数据结构之直接插入排序
- 【数据结构之排序2】直接插入排序
- 进程
- HTML中的那些常用标记
- SqueezeNet: Alexnet-level accuracy whith 50x Fewer Parameters And < 0.5MB Model Size
- 《Linux启动过程分析》内核挂载根文件系统
- 3 分布式数据库设计
- 数据结构之插入排序
- iOS拍照识别车牌技
- 读书笔记 -- 《代码之髓》
- 1109. Group Photo (25)
- SLA by Short brain-December-2016
- 使用 yum 安装 MariaDB 与 MariaDB 的简单配置
- 1114. Food Cubes
- ZCMU-1304-雪人
- display:inline-block引发的间隙思考