博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法之插入
阅读量:4515 次
发布时间:2019-06-08

本文共 1174 字,大约阅读时间需要 3 分钟。

插入排序

1.直接插入排序

时间复杂度:O(n^2)   O(n)    O(n^2) (最坏 最好 平均)

空间复杂度:O(1) 

思想:每次将一个待排序的数据按照其关键字的大小插入到前面已经排序好的数据中的适当位置(前面有序,后面无序),直到全部数据排序完成。

稳定性: 稳定 每次都是在前面已排好序的序列中找到适当的位置,只有小的数字会往前插入(比较),所以原来相同的两个数字在排序后相对位置不变。

代码:

/** * 插入排序 */public static void insertSort(int[] array) {//插入排序    for (int i = 1; i < array.length; i++ ) {        int temp = array[i];        int j = i;        while (j >= 0 && array[j-1] > temp) {              array[j] = array[j-1];            j--;        }        array[j] = temp;     }}

2.希尔排序

时间复杂度:O(n2)   O(n)   O(n1.5) (最坏,最好,平均)

空间复杂度:O(1)  

思想:希尔排序根据增量值对数据按下标进行分组,对每组使用直接插入排序算法排序;当增量减至1时,整体采用直接插入排序得到有序数组。

稳定性:不稳定 因为是分组进行直接插入排序,原来相同的两个数字可能会被分到不同的组去,可能会使得后面的数字会排到前面,使得两个相同的数字排序前后位置发生变化。
代码:

public static void shellSort(int[] array) {//希尔排序    int gap;    gap = array.length / 2; // 分成n/2组    while (gap >= 1) {        for (int i = gap; i < array.length; ++i) { //对每组进行直接插入排序            int temp = array[i];            int j = i;            while (j >= 0 && array[j-gap] > temp) {                array[j] = array[j-gap];                j -= gap;            }            array[j] = temp;        }        gap /= 2;    }}

转载于:https://www.cnblogs.com/Hmssser/p/8867653.html

你可能感兴趣的文章
表和视图之间的区别
查看>>
void及void指针含义的深刻解析
查看>>
标准差(standard deviation)和标准误差(standard error)你能解释清楚吗?
查看>>
南阳oj 题目722 数独
查看>>
小米平板6.0以上系统如何不用Root激活Xposed框架的步骤
查看>>
Elliptical Arcs with SVG
查看>>
做好微博营销的技巧与步骤
查看>>
Docker从入门到实战(二)
查看>>
自定义相机
查看>>
Oracle 体系结构2 - 实例和数据库
查看>>
关于Unity中Vector2和Vector3的使用
查看>>
类与方法
查看>>
Python学习笔记(九) map、zip和filter函数
查看>>
吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-plus-sign...
查看>>
吴裕雄--天生自然 JAVASCRIPT开发学习:比较 和 逻辑运算符
查看>>
html 存放PDF文档
查看>>
setTimeout 传参
查看>>
PC客户端开发细节记录:保存GUID到VARIANT
查看>>
day5感想
查看>>
给DEDE织梦CMS添加搜索结果页显示自定义字段
查看>>