时间:2021-05-20
本文实例讲述了Java插入排序方法。分享给大家供大家参考。具体分析如下:
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到插入排序法。本文主要介绍的是插入排序的java实现。
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。比较和交换的时间复杂度为O(n^2),算法自适应,对于数据已基本有序的情况,时间复杂度为O(n),算法稳定,开销很低。算法适合于数据已基本有序或者数据量小的情况。
插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置。
算法描述
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
1. 从第一个元素开始,该元素可以认为已经被排序
2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5. 将新元素插入到下一位置中
6. 重复步骤2
如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。
代码实现
public void insertionSort() { // 插入排序 int out, in; int count1 = 0, count2 = 0;// 复制次数,比较次数 for (out = 1; out < nElems; out++) { long temp = a[out]; in = out; boolean flag=in>0&&a[in-1]>=temp; while(flag){ if(a[in-1]>=temp){ if(in>0){ a[in]=a[in-1]; count1++; --in; } } count2++; flag=in>0&&a[in-1]>=temp; } a[in] = temp; } System.out.println("复制次数为:" + count1 + " 比较次数为:" + count2); }插入排序法在数据已有一定顺序的情况下,效率较好。但如果数据无规则,则需要移动大量的数据,其效率就与冒泡排序法和选择排序法一样差了。
希望本文所述对大家的java程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Java排序算法总结之希尔排序。分享给大家供大家参考。具体分析如下:前言:希尔排序(ShellSort)是插入排序的一种。是针对直接插入排序算法的
C++算法之希尔排序算法详解及实例希尔排序算法定义:希尔排序是插入排序的一种,也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。算法思想:希尔排序是把
排序算法常用的有冒泡排序,选择排序和插入排序,下面将用Java语言实现这三种排序方式,并且介绍一种由插入排序拓展出来的希尔排序。1、冒泡排序(BubbleSor
工具类简单明了地总结了java的快速排序,希尔排序,插入排序,堆排序,归并排序五种排序算法,代码中并没有对这几种排序算法的一个说明,关于思想部分希望在自行查阅相
一、概述: 本文给出常见的几种排序算法的原理以及Java实现,包括常见的简单排序和排序算法,以及其他常用的算法知识。简单排序:冒泡排序、选择排序、插入排序排序