关键词:
package sort; /**希尔排序的原理:根据需求,如果你想要结果从小到大排列,它会首先将数组进行分组,然后将较大值移到前面,较小值 * 移到后面,最后将整个数组进行插入排序,这样比起一开始就用插入排序减少了数据交换和移动的次数,可以说希尔排序是加强 * 版的插入排序 * 拿数组5, 2, 8, 9, 1, 3,4来说,数组长度为7,当increment为3时,数组分为两个序列 * 5,2,8和9,1,3,4,第一次排序,9和5比较,1和2比较,3和8比较,4和比其下标值小increment的数组值相比较 * 此例子是按照从小到到排列,所以小的会排在前面,第一次排序后数组为5, 1, 3, 4, 2, 8,9 * 第一次后increment的值变为3/2=1,此时对数组进行插入排序, */ public class ShellSort { public static void shellSort(int[] list) { //把数组分成两组 for (int increment = list.length / 2; increment > 0; increment /= 2) { //从第二组的第一个数的下标开始 for (int i = increment; i < list.length; i++) { //此为第二组第一个下标处的值 int temp = list[i]; int j =0; for ( j = i; j >= increment; j -= increment) { //j-increment 为第一组对应下标的值,如果它大,就被交换至第二组 //相应下标处 if(temp < list[j - increment]){ list[j] = list[j - increment]; }else{ break; } } //此时如果if里的成立,则j值已经为j-increment,即第一组下标处的值为第二组相应下标值 //如果if里的不成立 ,j不变,还是原来的值 list[j] = temp; } } } public static void main(String[] args){ int[] list ={5 , 2 , 8, 9 ,1,3,4,}; shellSort(list); for(int i =0;i<list.length;i++){ System.out.print(list[i]+" "); } } }
排序算法整理:冒泡排序堆排序插入排序归并操作快速排序希尔排序选择排序(代码片段)
SortUtils.javapackageprms.utils.sort;importjava.util.Arrays;/***@ClassName:SortUtils*@Description:<p>排序算法工具类</p>*@authoredgar*@email【[email protected]】*@versionV1.0*@date2017-3-2815:35:12*/publicclassSortUtils/***@Title:SortUtils*@Description:私有... 查看详情
算法思想整理
排序算法内部排序外部排序内部排序:数据全部在内存中进行排序外部排序:数据量太大,不能一次在内存中进行排序,因此,在排序的过程中需要使用到外部存储介质插入排序直接插入排序将一个数据插入到已经有序的序列中... 查看详情
《算法零基础100讲》(第38讲)排序进阶-希尔排序
...数那道题今天还是会有,所以不要着急,内容能看懂,能自己分析,能做出简单题,就可以打卡。 在刷题的过程中,总结自己遇到的坑点,写出「解题报告」供他人学习,也是一种自我学习的方式。这就是经典的帮助他人的... 查看详情
算法4整理(代码片段)
算法41.排序选择排序:每次获取最大的数,交换位置插入排序:把数字插入有序数组中希尔排序:有间隔并且间隔递减的归并排序:归并:两个有序数组的合并成新的有序数组自顶向下的归并排序:递归向下合并数组子底向上的归并排序:... 查看详情
自己整理的算法快速排序
packagesort;publicclassQuickSort{ publicstaticvoidquickSort(int[]list){ quickSort(list,0,list.length-1); } //注意这里是private privatestaticvoidquickSort(int[]list,intfirst,intlast){ //这里有一个if条件别忘了 if( 查看详情
自己整理的算法归并排序
packagesort;publicclassMergeSort{ publicstaticvoidmergeSort(int[]list){ if(list.length>1){ int[]firstHalf=newint[list.length/2]; System.arraycopy(list,0,firstHalf,0,list.length/2); mergeSort 查看详情
自己整理的排序算法之选择排序
1//选择排序2packagesort;34publicclassSelectionSort{5publicstaticvoidSelectionSort(double[]list){6for(inti=0;i<list.length-1;i++){7doublecurrentMin=list[i];8intcurrentMinIndex=i;910for(intk=i+1;k<lis 查看详情
所有排序算法汇总,冒泡,选择,插入,快速,优化快速,归并,希尔,堆排序
...置,遍历该元素前面所有的元素,如果前边的元素的值比自己大,那么就进行交换,每次都确保左边都是比自己小 查看详情
排序算法之希尔排序
希尔排序是希尔(DonaldShell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图... 查看详情
排序算法之希尔排序
... 希尔排序是希尔(DonaldShell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图... 查看详情
排序算法——希尔排序
...是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插... 查看详情
希尔排序算法
...①希尔排序又称缩小增量排序,它本质上是一个插入排序算法。为什么呢? 因为,对于插入排序而言,插入排序是将当前待排序的元素与前面所有的元素比较,而希尔排序是将当前元素 与前面增量位置上的元素进行比较... 查看详情
图解排序算法之希尔排序
希尔排序是希尔(DonaldShell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图... 查看详情
图解排序算法之希尔排序
希尔排序是希尔(DonaldShell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图... 查看详情
算法希尔排序
...尔排序希尔排序是希尔(DonaldShell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。它与插入排序的不同之处在于,它会优化比较距离较远 查看详情
算法:希尔排序(代码片段)
算法:希尔排序快速开始百科解释 希尔排序(Shell‘sSort)是插入排序的一种又称“缩小增量排序”(DiminishingIncrementSort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年... 查看详情
算法希尔排序推导方法
...1.概述希尔排序是希尔(DonaldShell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。希尔排序法基本思想希尔排序是把记录按下标的一定增量... 查看详情
希尔排序
...是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算... 查看详情