排序算法——插入排序
来源:互联网 发布:linux启动mysql244 编辑:程序博客网 时间:2024/05/16 19:11
本人小菜鸟一枚,最近今天准备努力研究一下各种排序算法,并直接写代码实现它,不足之处,欢迎指教,谢谢~
1、插入排序
很简单直接的理解方法,就是像打扑克牌一样,摸牌的时候,手里的牌通常是从小到大排列好的,右手摸起来的牌会从右到左(也可以从左到右)依次比较,然后插入其中。用计算机的思维来理解,我觉得可以分为以下几个步骤
首先,对现有的数组,从左到右,依次选取一个key,做为比较插入的对象;
第二,保证key前面的数都是排好序的;
第三,新来的key插入到前面排列好的序列即可;
文字说起来比较难理解,看图就明白了(图来自算法导论啊)
主要是通过两层循环控制1:外层循环控制key值的移动,内层循环控制与key值比较的数一次变化。下面就上代码了
#include "stdafx.h"#include<iostream>#include<iomanip>#include <iostream>#include <stdio.h>#include <string.h>#include <list>using namespace std;int main(){int data_array[] = {1,2,5,4,2,3,9,7,5,6,8};//待排序的数组int sum = sizeof(data_array) / sizeof(int);//求数组的大小,C++和C#求个数组大小都不一样for (int i = 1; i < sum; i++)//外层循环,控制key的移动,key从第二个元素开始,第一个默认是排好序的,因为就他自己{int key = data_array[i];int j = i - 1;while ((key <= data_array[j]) && (j >= 0))//内层循环,将key值依次与它前面的数进行比较,这里是非降序的排列,因此key不大于该数时,需要将其后移一位{data_array[j + 1] = data_array[j];j--;}data_array[j+1]=key;//注意这里是j+1,因为前面j--不满足条件退出循环,因此这里应该是key值赋到j+1位}for (int k = 0; k < sum; k++)//循环输出排好序的数组{cout << data_array[k];}return 0;}
0 0
- 排序—插入排序算法
- 排序算法—插入排序
- 数据结构&算法实践—【排序|插入排序】插入排序
- 排序算法—插入排序之直接插入排序
- 排序算法1—插入排序、选择排序、冒泡排序
- 排序算法——插入排序(直接插入排序、折半插入排序、希尔排序)
- 排序算法——插入排序
- 排序算法——二分插入排序
- 排序算法之一——插入排序
- 排序算法——插入排序
- 排序算法——插入排序
- 排序算法总结——插入排序
- 经典算法排序——插入排序
- 算法之排序——插入排序
- 排序算法——插入排序
- 排序算法3——插入排序
- 排序算法——插入排序
- 排序算法——插入排序
- iOS开发笔记25--Associative机制使用场景
- swift 可变参数
- 学习html(3)
- Android DES/3DES/AES加密方式
- 解决Hadoop jar *.jar 主类名 -libjars *.jar *.jar arg1 arg2 ... 中-libjars的方法
- 排序算法——插入排序
- android:ellipsize的使用
- 社説 20150702 新幹線放火殺人 利便性損ねずに再発防ぎたい
- 关于坚持与惰性
- 如何关掉xshell 讨厌的警告声音
- 社説 20150702 日銀短観改善 好循環の歯車は回り出したか
- 恭喜您成为2015年度Microsoft MVP!
- jquery返回顶部
- Eclipse优化设置