简单插入排序
来源:互联网 发布:网络推广的工作挣钱吗 编辑:程序博客网 时间:2024/05/22 08:16
简单插入排序
简单插入排序插入排序,是指将无序序列中的各元素依次插入到已经有序的线性表中。
原理
假设现在有一个有序列表
同样的,现在我们要对
分析
初始数组
- 将4插入到空集中,完成后 4 3 5 1 2
- 将3插入到新列表,完成后 3 4 5 1 2
- 将5插入到新列表,完成后 3 4 5 1 2
- 将1插入到新列表,完成后 1 3 4 5 2
- 将2插入到新列表,完成后 1 2 3 4 5
代码
void swap(int* a, int* b){ int temp = *a; *a = *b; *b = temp;}void insertionSort(int* arr, int len){ for(int i = 1; i < len; i++) { //查询第一个小于等于要插入元素的元素 int j = i - 1; while(arr[j] > arr[i]) { j--; } if(j != i - 1) { int temp = arr[i]; //把从j+1到i位的元素都后移一位 for(int k = i - 1; k > j; k--) { arr[k + 1] = arr[k]; } //把要插入的元素放在j+1位 arr[j + 1] = temp; } }}
优化
可以将每个元素与前面有序列表比较的过程改成类似与冒泡排序比较的过程。
void insertionSort(int* arr, int len){ for(int i = 1; i < len; i++) { for(int j = i; j > 0 && arr[j - 1] > arr[j]; j--) { swap(arr + j - 1, arr + j); } }}
时间复杂度
在最坏情况下,我们假设每次新元素都是最小的,那么插入第一个元素时需要0次比较,插入第二个元素时需要1次比较,插入第三个元素时需要2次比较……插入第n个元素时需要n-1次比较。
所以最坏情况的时间复杂度是
在最好的情况下,数组本来就是有序的,那么每插入一个元素,只需要和他前面相邻的元素进行比较就可以了,这种情况下时间复杂度是
阅读全文
0 0
- 简单排序--插入排序
- 简单排序--插入排序
- 简单排序:插入排序
- 简单插入排序
- 简单插入排序
- 简单的插入排序
- 简单插入排序
- 简单插入排序
- 简单插入排序
- 简单插入排序
- 简单插入排序
- 简单的插入排序
- 简单插入排序
- 插入排序---如此简单
- 简单的插入排序
- java简单插入排序
- 简单的插入排序
- 简单插入排序
- escape()、encodeURI()、encodeURIComponent()区别详解
- JAVA集合框架中的常用集合及其特点、适用场景、实现原理简介
- vim配置C++ IDE
- 当设计一个APP UI的时候我们想什么...
- Xamarin.Android 使用timer 并更改UI
- 简单插入排序
- html5 geolocation / 百度地图api Geolocation 定位当前城市信息&window.navigator.geolocation.getCurrentPosition,在IO
- final修饰的类特点
- EventBus 源码解析
- Swing方式建立数据库
- input 不可输入,并去除光标
- spring MVC 统一异常处理(webapi和web分开处理)
- Java数组排序算法
- 前缀、后缀、中缀表达式