希尔排序java代码
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于希尔排序java代码内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在希尔排序java代码相关知识领域提供全面立体的资料补充。同时还包含 xhtml、xml、xml 编辑器 的知识内容,欢迎查阅!
希尔排序java代码相关知识
-
图解排序算法,之希尔排序推荐阅读:http://www.java520.cn/希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步的对元素进行比较,移动,插入,比如[5,4,3,2,1,0]这种倒序序列,数组末端的0要回到首位置很是费劲,比较和移动元素均需n-1次。而希尔排序在数组中采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,然后分组进行插入排序,随后逐步缩小增量,继续按组进行插入排序操作,直至增量为1。希尔排序通过这种策略使得整个数组在初始阶段达到从宏观上看基本有序,小的基
-
希尔排序import java.util.Arrays; /** * 希尔排序 */ public class Sort6{ public static void sort(int[] A){ int grap = A.length/2; while(grap>0){ System.out.println("grap:"+grap+" "); //i指向每组第一个元素 for(int i=0;i<grap;i++){ //对每组进行插入排序 //j指向每组第二个元素至末尾,假设第一个元素是有序的 for(int j=i+grap;j<=i+(A.length/grap-1)*grap;j=j+grap){ //对A[k]进行插入排序 for(int k=j;k>i;k=k-grap){ if(A[k]<A[k-grap]){ Swap.swap(A,
-
Java常见排序算法详解——希尔排序概念: 希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位 原
-
希尔排序就这么简单tags: 算法 一、希尔排序介绍 来源百度百科: 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。 从上面我们很容易看出来,它是插入排序的高级版 回顾一下插入排序: 将数据插入到已有序的数列中 排序前:将每个元素看成有序的数列 第一趟排序后:得到一个有序数列,其大小为2 第二趟排序后:得到一个有序数列,其大小为3
希尔排序java代码相关课程
希尔排序java代码相关教程
- 希尔排序 今天我们来介绍一个比经典的排序算法:希尔排序。该算法时以它的发明者 Donald Shell 名字命名的,改进自插入排序算法,实现简单,在中等规模的数据上性能表现不错。我们同样从算法的思路、Python 实现以及复杂度分析三个方面学习希尔排序算法。
- 5. 实例测试希尔排序代码 我们来测试希尔排序算法的性能,使用10000个随机数进行测试:import randomimport datetimefrom sort_algorithms import shell_sort, insert_sort2if __name__ == '__main__': nums = [random.randint(10, 10000) for i in range(10000)] start = datetime.datetime.now() shell_sort(nums) # insert_sort2(nums) end = datetime.datetime.now() print('Running time: %s Seconds' % (end-start))PS C:\Users\spyinx\Desktop\学习教程\慕课网教程\算法慕课教程\code> & "D:/Program Files (x86)/python3/python.exe" c:/Users/spyinx/Desktop/学习教程/慕课网教程/算法慕课教程/code/test_algorithms.pyRunning time: 0:00:00.071001 Seconds然后来看看我们用前面改进的插入排序算法 (使用前面完成的 insert_sort2() 方法) 进行测试并和希尔排序的结果对比。可以看到希尔排序的性能大概是插入排序算法的 3 倍,所以希尔排序相比插入排序算法性能提升还是非常明显的。PS C:\Users\spyinx\Desktop\学习教程\慕课网教程\算法慕课教程\code> & "D:/Program Files (x86)/python3/python.exe" c:/Users/spyinx/Desktop/学习教程/慕课网教程/算法慕课教程/code/test_algorithms.pyRunning time: 0:00:00.216178 Seconds
- 2. 什么是希尔排序? 希尔排序(Shell Sort),是计算机科学与技术领域中较为简单的一种排序算法。希尔排序是插入排序的一种,有时候也被称为 “缩小增量排序”。它是插入排序的改进版,与插入排序的不同之处在于,希尔排序会优先比较距离较远的元素。希尔排序是按照其设计者希尔(Donald Shell)的名字命名而来,并于 1959 年公布出来。
- 3. 希尔排序过程 在介绍完希尔排序之后,我们一起来看一下希尔排序的实现步骤具体是什么样的吧。这里我们假设待排序的序列为 [9,2,11,7,12,5],我们按照从小到大的序列进行排序。
- 4. Java 代码实现 在说明希尔排序的整个过程之后,接下来,我们看看如何用 Java 代码实现希尔排序算法。import java.util.Arrays;public class ShellSort { public static void main(String[] args) { //初始化需要排序的数组 int array[] = {9, 2, 11, 7, 12, 5}; //初始化希尔排序的增量为数组长度 int gap = array.length; //不断地进行插入排序,直至增量为1 while (true) { //增量每次减半 gap = gap/2; for (int i = 0; i < gap; i++) { //内部循环是一个插入排序 for (int j = i + gap; j < array.length; j += gap) { int temp = array[j]; int k = j - gap; while (k >= 0 && array[k] > temp) { array[k + gap] = array[k]; k -= gap; } array[k + gap] = temp; } } //增量为1之后,希尔排序结束,退出循环 if (gap == 1) break; } //打印出排序好的序列 System.out.println(Arrays.toString(array)); }}运行结果如下:[2, 5, 7, 9, 11, 12]代码中的第 8 行初始化一个需要排序的数组,后面按照从小到大的排序规则,实现了数组的排序。第 12 行至 30 行是整个希尔排序的流程。第 14 行代码表示希尔排序中的增量每次整除 2 取得,第 17 行至 25 行是一个 for 循环结构,表明按照增量进行插入排序。最后第 32 行代码输出排序好的数组。
- 4. 希尔排序算法的 Python 实现 希尔排序的一个经典实现如下所示,接下来我们会画图描述下该代码的实现过程。def shell_sort(nums): """ 希尔排序 """ n = len(nums) d = n // 2 while d > 0: for i in range(d, n): temp = nums[i] j = i # 插入排序过程,可参考下图所示 while j >= d and nums[j - d] > temp: nums[j] = nums[j - d] j -= d nums[j] = temp # 每次排序数组间距减半 d = d // 2我们画图来对上述算法进行说明,它并没有完整依照前面的 shell 过程进行实现,不过执行过程和 shell 排序的思路是一致的。希尔排序代码示意图希尔排序的代码已经在上图中解释的非常清楚了,for 循环中每次会将该位置往前间隔 d 的列表保证有序,后面每次会在间隔 d 的列表中将 nums[i] 插入到对应的位置,并保证本次从该位置往前间隔为 d 的列表有序。每次 for 循环执行完成,间隔为 d 的列表就是有序的,即完成了希尔排序的核心过程。 接下来便是每次缩小增量 d 值,直到最后增量为0,排序结束。
希尔排序java代码相关搜索
-
xcode 教程
xhtml
xml
xml 编辑器
xmlhttp
xmlhttprequest
xml编辑器
xml格式
xml教程
xml是什么
xml文件
xquery
xsd
析构函数
系统工程师
系统架构
系统命令
下拉菜单样式
小程序开发教程
性能测试