插入排序
2015-10-17 10:12
127 查看
基本思想:
将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。
直接插入排序:
设立哨兵,作为临时存储和判断数组边界,记录要插入的元素。要插入的元素若比前一个元素小,就和前一个元素交换,然后,再进行比较,知道大于或等于前一个元素。
如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。
算法的实现:
时间复杂度为:O(n^2)。
空间复杂度为:1。
将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。
直接插入排序:
设立哨兵,作为临时存储和判断数组边界,记录要插入的元素。要插入的元素若比前一个元素小,就和前一个元素交换,然后,再进行比较,知道大于或等于前一个元素。
如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。
算法的实现:
#include"iostream" using namespace std; void InsertSort(int arr[], int length) { for (int i = 1; i < length; i++) { int x = arr[i]; for (int j = i - 1; j >= 0; j --) { if (x < arr[j]) { arr[j + 1] = arr[j]; arr[j] = x; } else { break; } } } } int main() { int arr[10] = { 1, 4, 2, 3, 6, 5, 9, 8, 7, 10 }; for (int i = 0; i < 10; i++) { cout << arr[i] << " "; } cout << endl; InsertSort(arr, 10); for (int i = 0; i < 10; i++) { cout << arr[i] << " "; } int a = 0; cin >> a; }
时间复杂度为:O(n^2)。
空间复杂度为:1。
相关文章推荐
- Android Api Demos登顶之路(101)View-->AutoComplete:Multiple items
- C语言——类型限定词
- IOS 中常用站位符
- 进程间通信各方式间比较
- JAVA基础学习day23--GUI基础
- caffe问题及解决方法
- poj3253
- javaWeb中图片验证码的生成
- 小小君的C语言第七课
- ASP.NET 5 Beta8 发布
- 为什么Redis比Memcached易
- org.apache.catalina.LifecycleException
- 简析poco框架库-数据库的用法
- javaWeb中图片验证码的生成
- Linux时间时区详解与常用时间函数
- JSP模板
- 学习记录――配置DNS服务器
- 在使用XMLHttpRequest的时,传到服务器的值出现空值
- wordpress取消显示toolbar
- 欢迎使用CSDN-markdown编辑器