Java排序算法总结之插入排序
2015-05-19 10:06
549 查看
本文实例讲述了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程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- Java排序算法总结之(一)——插入排序(直接插入排序、折半插入排序、希尔排序)
- Java排序算法总结之归并排序
- 学习《算法导论》第一章 插入排序 总结
- 总结4种常用排序(快排、选择排序、冒泡排序、插入排序)
- 算法:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)和选择排序(Selection Sort)总结
- Java排序算法以及算法改进总结(冒泡、选择、插入、归并、快速排序)
- 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- Java排序算法总结(四):希尔排序
- 排序方法总结(2)插入排序
- 插入排序总结
- 各种排序总结(二)之--归并排序、希尔排序、插入排序
- Java排序算法总结
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- Java排序算法【总结】
- Java排序算法总结(五):归并排序
- 内排序算法总结——插入排序
- java排序算法(一)_冒泡排序、插入排序、选择排序
- 排序算法总结之插入排序
- 各种排序总结(二)之--归并排序、希尔排序、插入排序
- 【学习总结】Java中最常用的三大排序算法-冒泡排序、选择排序、插入排序