您现在的位置是:首页 > 后台技术 > 数据结构与算法数据结构与算法
希尔排序法(图文)
第十三双眼睛2022-06-21【数据结构与算法】人已围观
简介希尔排序法
希尔排序法也是一种插入排序,是简单插入排序法经过改造的一种排序方法,基本思想是:
把记录按下标的一定增量分组,对每组按简单插入排序法进行排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量变成1时,整个文件就成了一组,算法便终止。
程序如下:
测试结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
把记录按下标的一定增量分组,对每组按简单插入排序法进行排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量变成1时,整个文件就成了一组,算法便终止。
程序如下:
package day006; 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}; shellSort2(arr); System.out.println(Arrays.toString(arr)); } // 希尔排序法交换法实现 public static void shellSort(int []arr){ int temp = 0; for(int gap = arr.length/2;gap>0;gap/=2){ for(int i=gap;i<arr.length;i++){ for(int j=i-gap;j>=0;j-=gap){ if(arr[j]>arr[j+gap]){ temp = arr[j]; arr[j] = arr[j+gap]; arr[j+gap] = temp; } } } } } // 希尔排序法移位法实现 public static void shellSort2(int []arr){ 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; } } } } } |
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Tags:
很赞哦! ()
相关文章
随机图文
-
动态规划算法解决背包问题(图文)
动态规划算法解决背包问题 -
删除有序数组中的重复项(图文)
删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过: 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。 返回 k 。 -
消失的数字(图文)
消失的数字 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 -
存在重复元素(图文)
存在重复元素 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。