希尔排序--交换式算法实现

基本思想:
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
代码实现:
分步演示:
package shellSort;

import java.util.Arrays;

public class shellsort {
	public static void main(String[] args) {
		int arr[] = {8,9,1,7,2,3,5,4,6,0};
		shellSort(arr);
	}
	public static void shellSort(int[] arr) {
		int temp = 0;
		//希尔排序的第一轮
		for(int i=5;i<arr.length;i++) {
			//遍历个组中的元素(共五组每组两个元素),步长为5
			for(int j=i-5;j>=0;j-=5) {
				//如果当前元素大于加上步长后的那个元素,说明交换
				if(arr[j]>arr[j+5]) {
					temp = arr[j];
					arr[j] = arr[j+5];
					arr[j+5] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(arr));
		
		//第二轮
		for(int i1=2;i1<arr.length;i1++) {
			for(int j1=i1-2;j1>=0;j1-=2) {
				if(arr[j1]>arr[j1+2]) {
					temp = arr[j1];
					arr[j1] = arr[j1+2];
					arr[j1+2] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(arr));
		
		//第三轮
		for(int i2=1;i2<arr.length;i2++) {
			for(int j2=i2-1;j2>=0;j2-=1) {
				if(arr[j2]>arr[j2+1]) {
					temp = arr[j2];
					arr[j2] = arr[j2+1];
					arr[j2+1] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(arr));
	}
}

综合:

package shellSort;

import java.util.Arrays;

public class shellsort {
	public static void main(String[] args) {
		int arr[] = {8,9,1,7,2,3,5,4,6,0};
		shellSort(arr);
	}
	public static void shellSort(int[] arr) {
		int temp = 0;
		//综合
		for(int m=arr.length/2;m>0;m/=2) {
			for(int n=m;n<arr.length;n++) {
				//遍历个组中的元素(共五组每组两个元素),步长为5
				for(int k=n-m;k>=0;k-=m) {
					//如果当前元素大于加上步长后的那个元素,说明交换
					if(arr[k]>arr[k+m]) {
						temp = arr[k];
						arr[k] = arr[k+m];
						arr[k+m] = temp;
					}
				}
			}
		}
		System.out.println(Arrays.toString(arr));
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值