java实现插入排序
2011-03-12 22:39
239 查看
插入排序是一种通过不断地把新元素插入到已排好序的数据中的排序算法,常用的插入排序算法包括直接插入排序和shell排序,直接插入排序实现比较简单,时间复杂度是O(n),但是直接插入没有充分的利用已插入的数据已经排序这个事实,因此有很多针对直接插入排序改进的算法,例如折半插入排序等,下边是直接插入排序的Java实现:
另一种常用的插入排序算法:Shell排序也是对直接插入排序算法的一种优化,因此可以说直接插入排序是一种特殊的Shell排序,Shell排序对直接插入排序的优化主要体现在,Shell排序通过使用一个增量序列(递减),每次把要排序的数组分成几个子数组,然后对子数组进行插入排序,这样可以减少比较和移动数据的次数,Shell排序是一种非常高效的排序算法,该算法的思想是:
1.以h(h一般取n/2)为间隔将n个元素列分为几个小组,在每个小组内按直接插入法排序
2.令h=h/2,重复第1步
3.当h=1时,排序结束(此时相当于直接插入排序,不过由于数据已经基本排好序,因此比较次数和移动次数比直接插入排序少很多)
Shell排序的Java实现如下:
public static void insertSort(int[] elements){ for(int i = 1;i <elements.length; i++){ int j = -1; while(j <= i && elements[i] > elements[++j]);//找到element[i]应该摆放的位置,此处可以利用查找算法进行优化 if(j < i){ //将j之后的数据移动一位,然后把elements[i]移动到j处 int temp = elements[i]; for(int k = i-1;k >= j;k--){ elements[k+1] = elements[k]; } elements[j] = temp; } } }
另一种常用的插入排序算法:Shell排序也是对直接插入排序算法的一种优化,因此可以说直接插入排序是一种特殊的Shell排序,Shell排序对直接插入排序的优化主要体现在,Shell排序通过使用一个增量序列(递减),每次把要排序的数组分成几个子数组,然后对子数组进行插入排序,这样可以减少比较和移动数据的次数,Shell排序是一种非常高效的排序算法,该算法的思想是:
1.以h(h一般取n/2)为间隔将n个元素列分为几个小组,在每个小组内按直接插入法排序
2.令h=h/2,重复第1步
3.当h=1时,排序结束(此时相当于直接插入排序,不过由于数据已经基本排好序,因此比较次数和移动次数比直接插入排序少很多)
Shell排序的Java实现如下:
public static void shellSort(int[] elements){ for(int h = elements.length/2;h > 0;h /= 2){ for(int i = h;i < elements.length; i++){ int j = i % h; while(j <= i && elements[i] > elements[j]) j += h;//找到element[i]应该摆放的位置 if(j < i){ //将j之后的数据移动h位,然后把elements[i]移动到j处 int temp = elements[i]; for(int k = i-h;k >= j;k -= h){ elements[k+h] = elements[k]; } elements[j] = temp; } } } }
相关文章推荐
- java选择排序、冒泡排序和插入排序实现
- Java实现排序(快速排序、冒泡排序、选择排序、基数排序、插入排序)
- 算法系列(二)冒泡排序、选择排序、插入排序和希尔排序(Java实现)
- 读《程序员编程艺术》之自造Java版本-----插入排序实现最小K问题
- Java程序员从笨鸟到菜鸟(二)Java实现冒泡排序、快速排序、插入排序、选择排序等基本排序方式
- 插入排序(Insertsort)之Java实现
- Java实现插入排序
- 基于Java实现插入排序
- java实现插入排序
- [Java学习] Java插入排序实现
- java实现快速排序、插入排序、选择排序、冒泡排序算法
- java实现 冒泡排序 插入排序 选择排序
- Java实现排序算法之 - 插入排序
- Java实现插入排序
- 数据算法之插入排序(insertSort)的Java实现
- Java 实现三种简单排序——选择排序、插入排序、冒泡排序
- Java实现插入排序
- Java实现插入排序的写法
- 关于java实现插入排序的思考
- java实现插入排序