算法--希尔排序可视化

作者&投稿:牧砍 (若有异议请与网页底部的电邮联系)
~ 算法--希尔排序可视化

一直都想做各种数据可视化

现用工具echarts做排序过程可视化

希尔排序

算法性能取决于h

functionshellSort(array){constN=array.length;leth=1;while(h<N/3)h=3*h+1;while(h>=1){for(leti=h;i<N;i++){for(letj=i;j>=h&&array[j]<array[j-h];j-=h){lettem=array[j];array[j]=array[j-h];array[j-h]=tem;process.push(arr.slice(0));}}h=Math.floor(h/3);}}shellSort(arr);

其中process是用来存储过程的数组,每次变化的数组结果都存在该数组中,每次存入结果如下:

希尔排序,将固定间隔的数形成多个数组,每个数组进行排序,间隔量从指定值缩小到1,最后将多个数组合并成一个。

Echarts

三部曲,设置DOM元素---初始化Echarts---设置Option

通过不断改变option中的数据来不断更新图表,最终形成动画

animationDuration:0,animationDurationUpdate:1000,animationEasing:"linear",animationEasingUpdate:"linear",//在option中设置转换动画

播放动画

这里使用了setInterval函数来播放动画,将过程数组的长度作为标识符,如果长度大于零,那么取出来设置到option中,最终形成动画

完整代码如下<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>Document</title><style>*{margin:0;padding:0;box-sizing:border-box;}.shell{width:100%;height:100vh;}</style></head><body><divclass="shell"></div><scriptsrc="./js/echarts.min.js"></script><script>constarr=[88,90,30,5,45,2,34,23,45,65,64,34,34];constdom=document.querySelector(".shell");constmyChart=echarts.init(dom);constoption={//图表位置grid:{top:10,bottom:30,left:100,right:80,},xAxis:{type:"value",},yAxis:{type:"category",data:arr,},series:[{name:"number",type:"bar",data:arr,label:{show:true,//position:"right",valueAnimation:true,},},],animationDuration:0,animationDurationUpdate:1000,animationEasing:"linear",animationEasingUpdate:"linear",};myChart.setOption(option);constprocess=[];//希尔排序functionshellSort(array){constN=array.length;leth=1;while(h<N/3)h=3*h+1;while(h>=1){for(leti=h;i<N;i++){for(letj=i;j>=h&&array[j]<array[j-h];j-=h){lettem=array[j];array[j]=array[j-h];array[j-h]=tem;process.push(arr.slice(0));}}h=Math.floor(h/3);}}shellSort(arr);//播放动画constinterval=setInterval(()=>{if(process.length===0){clearInterval(interval);}else{consttemArr=process.shift();console.log(temArr);option.yAxis.data=temArr;option.series[0].data=temArr;myChart.setOption(option);}},1000);</script></body></html>


希尔排序法属于哪一种类型的排序法()
插入排序。希尔排序法属于插入排序的一种改进方法,利用了相邻元素之间的相对位置关系,将待排序序列分成若干个子序列,每个子序列按照一定的间隔进行排序,将经过排序的子序列合并成有序序列,希尔排序法看作是插入排序的一种变体。

选择排序js?
解析:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 以此类推,直到所有元素均排序完毕。 5.希尔排序: 解析:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序 6.归并排序: 解析:归并排序是一种稳定的...

公共基础知识复习指导~
插入类排序法:(1)简单插入排序法,最坏情况需要n(n-1)\/2次比较;(2)希尔排序法,最坏情况需要O(n1.5)次比较。选择类排序法:(1)简单选择排序法, 最坏情况需要n(n-1)\/2次比较;(2)堆排序法,最坏情况需要O(nlog2n)次比较。第二章程序设计基础2.1 程序设计设计方法和风格如何形成良好的程序设计风格1、源...

新手问“希尔排序法”谁了解,不要复制粘贴
完全手打:希尔排序是一种插入排序,在每趟排序时都依据一定的步长使用插入法将元素排为基本有序 由于最后一趟的步长一定为1,因此可以保证排序结果为一个有序序列 一般会取序列长度的一般作为第一个步长,然后每趟将步长减半,最终到步长为1使得整个序列有序 由于起始的步长较长,在某些特定场景下可以使得...

计算机网络工程师四级考试的过关技巧(比如哪些章节要牢记,哪些理解)_百...
⑹ 拓扑排序。 7.文件及其查找: ⑴ 数据文件的基本概念。 ⑵ 顺序文件及其查找方法(顺序查找方法,折半查找方法)。 ⑶ 索引文件及其查找方法。 ⑷ 散列文件及其查找方法。 8.内排序: ⑴ 排序的基本概念(定义,功能,分类)。 ⑵ 插入排序方法。 ⑶ 选择排序方法。 ⑷ 起泡排序方法。 ⑸ 希尔排序方法。 ⑹ 快...

对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正...
【答案】:A A) 【解析】在最坏情况下,冒泡排序所需要的比较次数为n(n-1)/2;简单插入排序所需要的比较次数为n(n-1)/2;希尔排序所需要的比较次数为O(n1.5);堆排序所需要的比较次数为O(nlog2n)。

面试必会八大排序算法(Python)
②重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边);③对所有两个小数列重复第二步,直至各区间只有一个数。排序演示 算法实现 四、希尔排序 介绍 希尔排序(Shell Sort)是插入排序的一种,也是缩小增量排序,是直接插入排序算法的一种...

一文图解归并排序,一看就懂 !
小栗子:图解无序序列进行希尔排序。五、算法实现#include<stdio.h>voidmerge(intarr[],intL,intM,intR){intLEFT_SIZE=M-L;intRIGHT_SIZE=R-M+1;intleft[LEFT_SIZE];intright[RIGHT_SIZE];inti,j,k;\/\/填充左边的数组for(i=L;i<M;i++){left[i-L]=arr[i];}\/\/填充右边的数组for(i=...

全国计算机二级考试中公共基础知识是占多少分的?
1.8.2插入类排序法 (P35—P37) 1. 简单插入排序法 自以为插入排序,是指将无序序列中的各元素依次插入到已经有序的线性表中。 在简单插入排序法中,这种排序方法的效率与气泡排序法相同。在最坏情况下,证券交易插入排序需要n(n-1)\/2次比较。 2. 希尔排序法 希尔排序法属于插入类排序,但它对简单插入排序做了...

线性的数据结构可以顺序存储也可以链接存储
2、键码序列(26,25,20,33,21,24,42,37),要用散列法进行存储,规定负载因子α=0.5.1)\\x05(2分)请给出除余法的散列函数.2)\\x05(3分)用链接法解决碰撞,请画出插入所有的关键码后得到的散列表.3、(6分)已知序列[10,18,4,3,6,12,l,9,15,8],请给出采用希尔排序法(d1=5...

孟村回族自治县18862656124: 希尔排序法原理?? -
宇文蒲心欣: 希尔排序法(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法.算法思想简单描述 在直接插入排序算法中,每次插入一个数,使有序序列只增加1个节点,并且对插入下一个数没有提供任何帮助....

孟村回族自治县18862656124: 希尔排序(c语言) -
宇文蒲心欣: #include<stdio.h>#include<conio.h> void main() {int a[30],i=0,j,x,n,gap; printf("希尔排序法,请输入数据,以-1结束\n"); for(i=0;i<30;i++) {scanf("%d",a+i); if(a[i]==-1) break; } n=i; gap=n/2; while(gap>0) {for(i=gap;i<n;i++) {j=i-gap; while(j>=0)...

孟村回族自治县18862656124: 希尔排序究竟是怎么排的? -
宇文蒲心欣: 希尔排序的算法思想 先将整个待排序元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的),分别进行直接插入排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序. 希尔排序算...

孟村回族自治县18862656124: 希尔排序的具体方法原理是什么?
宇文蒲心欣: 希尔排序是基于插入排序的一种算法,在此算法基础之上增加了一个新的特性,提高了效率

孟村回族自治县18862656124: 希尔排序的排序过程 -
宇文蒲心欣: 希尔排序属于插入类排序,是将整个有序序列分割成若干小的子序列分别进行插入排序. 排序过程:先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1,...

孟村回族自治县18862656124: 希尔排序法怎样排序?
宇文蒲心欣: 希尔排序是插入排序的一种. 基本思想: 先取一个小于 n 的整数 d 1 作为第一个增量,把文件的全部记录分成 d 1 个组.所有距离为 d l 的倍数的记录放在同一个组中.先在各组内进行直接插人排序;然后,取第二个增量 d 2 <d 1 重复上述的分组和排序,直至所取的增量 d t =1(d t <d t-l <…<d 2 <d 1 ) ,即所有记录放在同一组中进行直接插入排序为止. 该方法实质上是一种分组插入方法.

孟村回族自治县18862656124: 希尔排序算法证明 -
宇文蒲心欣: 希尔排序:* 不需要大量的辅助空间,和归并排序一样容易实现.希尔排序是基于插入排序的一种算法,* 在此算法基础之上增加了一个新的特性,提高了效率.希尔排序的时间复杂度为 O(N*(logN)2),* 没有快速排序算法快 O(N*(logN)),因...

孟村回族自治县18862656124: 希尔排序算法 -
宇文蒲心欣: 如果“完全”看不懂,说明你没有看该算法的介绍文本,建议去仔细地看一下!然后对照此程序(如有条件可以对此程序进行单步跟踪运行以观察其运行方式)理解该算法Gap=8:462 17 512 908 170 897 275 653 503 154 509 612 677 765 703 ...

孟村回族自治县18862656124: 希尔排序算法的思想是什么? -
宇文蒲心欣: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成(n除以d1)个组.所有距离为d1的倍数的记录放在同一个组中.先在各组内进行直接插入排序;然后,取第二个增量d2<…

孟村回族自治县18862656124: 希尔排序如何确定已完全排序如题
宇文蒲心欣: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止.一般的初次取序列的一半为增量,以后每次减半,直到增量为1.当增量是1的时候,已完全排序

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网