本文主要是介绍希尔排序算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
希尔排序:插排后更高效排序,缩小增量排序。把记录按下标的一定增量分组。
对每组使用直接插入排序算法排序;随着增量减少,包含关键词越来越多,
当增量减少到1时,整个文件被分成一组,算法便终止。分交换法和移动法。
如 int arr[] = {8,9,1,7,9,3,5,4,6,0};
先让 8和3,9和5,1和4...等待比较
/*
*希尔排序插入 交换法
* 时间复杂度 :
*/
public void shellSort(int arr[]){
int tmep=0;
for (int gep = arr.length/2; gep >0 ; gep /=2) {
for (int i = gep; i <arr.length ; i++) {
//gep为步长
for (int j = i-gep; j >=0; j -=gep) {
if(arr[j]>arr[j+gep]){
tmep=arr[j];
arr[j]=arr[j+gep];
arr[j+gep]=tmep;
}
}
}
}
System.out.println("希尔交换法排序"+Arrays.toString(arr));
}
/*
*希尔排序插入 移动法
* 时间复杂度 :
*/
public void shellSort2(int arr[]){
for (int gep = arr.length/2; gep >0 ; gep /=2) {
for (int i = gep; i < arr.length; i++) {
int j=i;
int tmep=arr[j];//先把后边数字保存
if(arr[j]<arr[j-gep]){
while (j-gep>=0&& tmep<arr[j-gep]){//如果后边的小于前边的数
//移动
arr[j]=arr[j-gep];//把前边的数放到后边
j-=gep;//减完之后j小了
}
arr[j]=tmep;//把后边的数移动到前边
}
}
}
System.out.println("希尔移动法排序"+Arrays.toString(arr));
}
这篇关于希尔排序算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!