栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

排序算法之希尔排序(Java)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

排序算法之希尔排序(Java)

希尔排序 插入排序产生的问题

例如数组:arr={2,5,6,7,8,1}使用插入排序时,将1移到最前面的位置,需要使前面所有的位置都发生移动,因此对于这种情况,插入排序的效率会大大降低。
什么是插入排序?

希尔排序简介

针对上述情况,我们可以利用希尔排序的方式进行解决。
希尔排序本身就是插入排序,它是一种更高效的版本,也称为缩小增量排序。

基本思想
  1. 先对数组进行一定增量的分组;
  2. 将各个分组进行插入排序算法进行排序;
  3. 随着分组增量的减少,当减至1时,分为一组,排序结束。
示意图


代码实现
  1. 利用交换进行组内排序
	public static void shellSort(int []arr){
		//第1个for设置步长
		for(int gap = arr.length / 2; gap > 0; gap /= 2){
			//第2个for根据步长进行分组
			for(int i = gap;i < arr.length;i++){
				//第3个for对每一个组进行排序
				for(int j = i - gap;j >= 0;j -= gap){
					//交换
					int temp = arr[j];
					arr[j] = arr[i];
					arr[i] = temp;
				}
			}
		}
	}
  1. 利用插入进行组内排序
	for(int gap = arr.length / 2;gap > 0;gap /= 2){
		for(int i = gap; i < arr.length;i++){
			int j = i;
			int temp = arr[j];
			if(arr[j] < arr[j - gap]){
				while(j - gap >= 0 && temp < arr[j - gap]){
					arr[j] = arr[j - gap];
					j -= gap;
				}
				arr[j] = temp;
			}
		}
	}
  • 两种方式在思想上是不变的,都是分组,再对分组后的每一次进行排序,只是具体采用的排序算法不同,一个是交换,一个是插入排序。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020918.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号