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

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

转自

1、基本思想

直接插入排序的基本操作是将一个记录插入到已经排好的有序表中,从而得到一个新的、记录数增1的有序表。对于给定的一组记录,初始时假定第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直到最后一个记录插到有序序列中为止。

从小到大的排序过程

(1)首先给定一个int数组,然后默认第一个数已经排好序

(2)然后将第二个数看做即将要插入的数,并把它存到中间变量insertNode

(3)然后向前(insertNode之前的数)比较,如果insertNode比前面的数小,那么向后移动那个较大的数,直到没有比insertNode大的数,也就找到了insertNode的合适的位置

(4)把insertNode插入到合适的位置,然后把第三位数看做即将要插入的数,循环上述步骤,直到全部有序。

 

2、复杂度分析

当最好的情况,也就是要排序的表本身就是有序的,此时只有数据比较,没有数据移动,时间复杂度为O(n)

当最坏的情况,即待排序的表是逆序的情况,此时需要比较次数为:2+3+…+n=(n+2)(n-1)/2 次,而记录移动的最大值也达到了 (n+4)(n-1)/2 次.
如果排序记录是随机的,那么根据概率相同的原则,平均比较和移动次数约为次这里写图片描述,因此,得出直接插入排序发的时间复杂度为这里写图片描述。从这里可以看出,同样的是时间复杂度这里写图片描述,直接插入排序法比冒泡和简单选择排序的性能要好一些。

3、排序过程如下

以数组{38,65,97,76,13,27,49}为例,

这里写图片描述

4、Java实现如下

public class InsertSort {    public static void insertSort(int[] a) {        int i, j, insertNote;// 要插入的数据        for (i = 1; i < a.length; i++) {
// 从数组的第二个元素开始循环将数组中的元素插入 insertNote = a[i];// 设置数组中的第2个元素为第一次循环要插入的数据 j = i - 1; while (j >= 0 && insertNote < a[j]) { a[j + 1] = a[j];// 如果要插入的元素小于第j个元素,就将第j个元素向后移动 j--; } a[j + 1] = insertNote;// 直到要插入的元素不小于第j个元素,将insertNote插入到数组中 } } public static void main(String[] args) { int a[] = { 38,65,97,76,13,27,49 }; insertSort(a); System.out.println(Arrays.toString(a)); }}

 

转载于:https://www.cnblogs.com/lijingran/p/8690838.html

你可能感兴趣的文章
Chrome 控制台不完全指南
查看>>
Notification与多线程
查看>>
高可用、高扩展性、负载均衡
查看>>
VIM用法
查看>>
oscache.properties文件配置
查看>>
新建索引的一些原则
查看>>
redis发布了集群版3.0.0 beta
查看>>
使用Gradle在嵌入式Web容器Jetty中运行Web应用
查看>>
100-98
查看>>
Innodb中的事务隔离级别和锁的关系
查看>>
算法:请找出数组中的某个数,它的左侧数字相加之和等于右边。
查看>>
vi / vim文档编辑器画图详解
查看>>
Oracle基本语句实例代码介绍
查看>>
excel表数据导入到mysql数据库中(自己做的练习保留)
查看>>
bash 函数使用,实现模块化编程
查看>>
LVS实现负载均衡
查看>>
LAMP架构下安装Discuz!论坛
查看>>
shell
查看>>
正则表达式
查看>>
我的友情链接
查看>>