希尔排序
Posted 番茄疯了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希尔排序相关的知识,希望对你有一定的参考价值。
回顾插入排序:越有序越快 好的时间复杂度为O(n)坏的为O(n^2)
假如有10000个数进行排序那么直接插入排序的时间复杂度为10000*10000
如果采用分组思想,让组内进行直接插入排序那么时间复杂度就为100*100*100
我们希尔排序就是利用分组思想进行排序的 让每组数据变得有序 越有序越快
希尔排序的时间复杂度为O(n^1.3~n^1.5) 不稳定
写程序时要件进行分组,产生组的概念(记得产生的组必须互为素数,且最后一个增量必须是1),然后再进行每一组的直接插入排序 .
package sort; import java.util.Arrays; public class TestShellSortDemo { public static void shellSort(int [] array){ //产生组的概念 int [] d={5}; for(int i=0;i<d.length;i++){ shell(array,d[i]); } } //每一组进行直接插入排序 public static void shell(int[]array,int gap){ int tmp = 0; int i = 0; int j = 0; for( i = gap;i < array.length;i++){//这里一定注意是i++,如果是i+=gap就会让剩下的几组没有排 tmp=array[i]; for( j = i-gap;j>=0;j-=gap){ if(array[j]>tmp){ array[j+gap]=array[j]; }else{ break; } } array[j+gap]=tmp; } } public static void main(String[] args) { // TODO Auto-generated method stub int[]array={22,77,99,11,55,33,66,88,44,55,23,12,54,16,87}; shellSort(array); System.out.println(Arrays.toString(array)); } }
以上是关于希尔排序的主要内容,如果未能解决你的问题,请参考以下文章