希尔排序的基本思想(划分):把待排序的数列按照一定的增量分割成多个子数列,这些子数列不是连续的,然后对每个子数列进行插入排序。接着增量逐渐减小,在减小到1后直接使用插入排序处理数列。
希尔排序的具体例子如下(每次n/2缩小规模):
希尔排序的实现代码如下:
package com.threeTop.www;
/***
* 希尔排序的实现
* @author wjgs
*
*/
public class ShellSort {
private int[]array;
//构造函数进行初始化
public ShellSort(int []array)
{
this.array=array;
}
/***
* 希尔排序,每次以n/2减少规模
*/
public void sort()
{
int temp;
for(int k=array.length/2;k>0;k/=2)
{
for(int i=k;i<array.length;i++)
{
for(int j=i;j>=k;j-=k)//内部控制元素的交换
{
if(array[j-k]>array[j])
{
temp=array[j-k];
array[j-k]=array[j];
array[j]=temp;
}
}
}
}
}
//打印输出
public void print()
{
for(int i=0;i<array.length;i++)
{
System.out.print(array[i]+" ");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int []array={5,9,1,9,5,3,7,6,1,10,4};
ShellSort shellsort=new ShellSort(array);
shellsort.sort();
shellsort.print();
}
}