【基础算法】排序-简单排序之三(插入排序)
来源:互联网 发布:如何评价香港 知乎 编辑:程序博客网 时间:2024/05/17 01:20
一. 一般插入排序
想象一下打扑克,每次都把摸上来的牌放到正确的位置,插入排序也一样,从第二个数开始依次和第一个数比较,直到放到正确的位置为止,时间复杂度为O(N^2/4), 证明如下:
代码如下
// comparepublic static boolean more(int v, int w) {return v > w;}// exchangepublic static void exchange(int[] array, int i, int j) {int temp = array[i];array[i] = array[j];array[j] = temp;}// insertionSort Algorithmpublic static void insertionSort(int[] array) {for (int i = 1; i < array.length; i++) { // i++for (int j = i; j > 0; j--) {if (more(array[j-1], array[j]))exchange(array, j-1, j );elsebreak;}}}
二. 希尔插入排序
我们发现,插入排序在初始序列排好序的情况下时间复杂度为O(N),所以有没有一种算法可以改进初始序列使其无限接近与排好序的序列
希尔排序就是这个目的,这种排序通过分割的方法让初始序列无限优化,直到最后一次进行插入排序的时候,序列无限接近于排好序的状况。
代码如下
// comparepublic static boolean more(int v, int w) {return v > w;}// exchangepublic static void exchange(int[] array, int i, int j) {int temp = array[i];array[i] = array[j];array[j] = temp;}// insertionSort Algorithmpublic static void shellSort(int[] array) {int increment = 1;while (increment < array.length / 3)increment = 3 * increment + 1; // 3X+1 increment sequencewhile (increment >= 1) {for (int i = 1; i < array.length; i++) { // i++for (int j = i; j >= increment; j = j - increment) {if (more(array[j-increment], array[j]))exchange(array, j, j - increment);elsebreak;}}increment = increment / 3;}}
0 0
- 【基础算法】排序-简单排序之三(插入排序)
- 排序算法(三)之插入排序
- 排序算法_C++(三)插入排序之希尔排序
- 排序算法之三 插入排序
- 蛙步学排序算法之三 - 插入排序
- 【算法-排序之三】插入排序
- 【算法-排序之三】插入排序
- 【算法-排序之三】插入排序
- 排序算法之三---插入排序
- PHP基础排序算法(三)插入排序
- 【基础算法】排序-复杂排序之三(堆排序)
- 算法基础之排序篇-插入排序
- 基础算法--排序: 之插入排序
- 基础算法之排序(3)--插入排序
- 算法基础之排序—插入排序
- 内部排序算法之简单插入排序
- C++简单排序算法之插入排序
- 排序算法之简单插入排序法
- android 网络操作 一些常见的 HTTP 状态码
- gcc编译选项
- struts2 validate(struts2 验证框架)
- NTAPI的定义
- 线程间的通信
- 【基础算法】排序-简单排序之三(插入排序)
- applicationContext.xml的存放位置对应web.xml的写法
- 5.5.2 函数类型
- How to become a proficient Python programmer
- android开发过程中的一些杂谈
- CentOS、Ubuntu、Debian三个linux比较异同
- c++库
- dequeueReusableCellWithIdentifier的理解
- Linux下普通用户授予root权限方法详解