基于插入的排序算法
来源:互联网 发布:excel表格查找重复数据 编辑:程序博客网 时间:2024/06/05 11:47
排序算法被分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因为排序的数据量很大,一次性不能容纳全部的排序记录,
在排序的过程中是要访问外存的。我们所讨论的几种排序算法均为内部排序。
八大排序算法大体可分为:基于插入,基于交换,基于选择,归并和基数排序,这里先讲基于插入的两种排序。
一、直接插入排序(Insertion Sort)
基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中适当的位置,直到全部记录插入完成为止。
代码实现:
public class InsertSort {public void inserSort(int[] array){int i;int j;for(i=1; i<array.length; i++){int temp = array[i];for(j=i-1; j>=0&&array[j]>temp; j--){array[j+1] = array[j]; }array[j+1] = temp;}}}
因为整个插入的过程中,经过了两重循环,所以时间复杂度为O(n^2)
二、希尔排序(Shell's Sort)
基本思想:希尔排序的实质是分组插入排序。先将整个带排序元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接 插入排序。因为直接插入排序在元素基本有序的情况下,效率是很高的。
代码实现:
public class ShellSort {public void shellSort(int[] array){int gap = array.length/2;//设置一个增量//用插入排序的思想按照gap的位置对数组进行排序int temp;while(gap > 0){for(int i=gap; i<array.length; i++){temp = array[i];int j;for(j=i-gap; j>=0&&temp<array[j]; j=j-gap){array[j+gap] = array[j];}array[j+gap] = temp;}gap = gap/2;}}}
希尔排序是插入排序的一种实现,但是希尔排序的时间复杂度要比直接插入排序高很多,希尔排序的时间复杂度为O(n^(1+x),0<X<1)。
0 0
- 基于插入的排序算法
- 基于递归的插入排序算法
- 算法实践篇-基于插入排序的桶排序
- 基于JAVA的排序算法之三--插入排序
- 基于单链表的直接插入排序算法和代码实现
- 基于数组的直接插入排序算法和代码实现
- scala数据结构和算法-09-基于插入排序的基数排序
- 基于递归的插入排序
- 基于递归的插入排序
- 基于java实现的插入排序、归并排序算法的实现和比较
- 算法系列—希尔排序(基于插入排序)
- 插入排序的递归算法
- 插入排序的递归算法
- 插入排序的算法温习
- 插入排序算法的实现
- 改进的插入排序算法
- 插入排序算法的实现
- 插入排序算法的思想
- 解决Fedora升级时nvidia显卡问题
- P123 第30题 求杨辉三角的第39行第19列的数
- js图片实时加载提供网页打开速度
- log4j-总结-1
- Java 内存分配全面浅析
- 基于插入的排序算法
- kyeremal-网络流24题T6-最长递增子序列问题
- 汪国真:只要热爱生命,一切都在意料之中
- 快速排序
- pentaho report 设计使用心得——5点建议
- 用java写一个万年历
- 香港1997年是怎样被索罗斯击败的
- android-Intent
- 杭电1465 不容易系列之一