`
javapolo
  • 浏览: 131580 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

js 动画排序算法(选择排序,冒泡排序,归并排序)

    博客分类:
  • js
阅读更多

         日常开发过程中,我们最常使用到的算法就是排序算法,最常用的排序算法例如选择排序,冒泡排序,归并排序,快速排序,二叉排序,堆排序等,周末闲来无事,刚好回顾下这些算法,并将其中的选择排序,冒泡排序和归并排序,以动画的方式展示,话不多说,先上动画截图,在上代码

1.截图部分


 2.代码

 实现思路:

 即在每进行一轮排序之后做页面渲染(每个数据对应一个颜色块)

/**.

 * User: lsj

 * Date: 14-4-2

 * Time: 下午3:13

 */

var sortManager=(function (){

    //柱状总高度

    var HEIGHT_TOTAL=2000;

   //显示宽度

    var WIDTH_TOTAL=$(window).width(); 

   //颜色数组

    var colorArray=['red','blue','grey','yellow','pink'];

    //生成bar

    function  generateBar(data,index,sumtotal,lengthtotal,container)

    {

        var heightPercentage=data/sumtotal;

 

        var widthPer=(WIDTH_TOTAL-2*lengthtotal-20)/lengthtotal;

        //柱状高度

        var barHeight=HEIGHT_TOTAL* heightPercentage+"px";

        var barWidth= widthPer+"px";

        var color=colorArray[index%5];

        var bar=$("<div style='margin-bottom: 0;background:"+color+";float: left;margin-right:2px;width:"+barWidth+" ;height:"+barHeight+"'><input type='hidden' value='"+data+"'></div>")

 

        bar.mouseover(function(e){

           var data=$(this).find("input").val();

           var remind=$("<div class='remind'  style='position: absolute;padding: 10px 15px;border-bottom: 1px solid #cccccc'>"+data+"</div>");

           var x=e.pageX;

           remind.css("left",x);

           var y= e.pageY;

           remind.css("top",y);

           $(document.body).append(remind);

        });

 

        bar.mouseleave(function(){

 

               $(document.body).find(".remind").remove();

 

        });

 

        //附加bar

        container.append(bar);

    }

    //动画排序结果

    function  animationSort(sortArray,total,container)

    {

 

       //清空容器

        container.html("");

       var length= sortArray.length;

       for(var i=0;i<length;i++)

       {

           generateBar(sortArray[i],i,total,length,container);

       }

    }

 

    return{

        /**

         * 冒泡排序

         * @param sortArray

         */

        bubleSort:function(sortArray,sumtotal,container)

        {

 

            var length=sortArray.length;

            var temp;

            var index=0;

            //一次冒泡

            function bubble()

            {

                for(var j=0;j<length-index-1;j++)

                {

                    if(sortArray[j]>sortArray[j+1])

                    {

                        temp= sortArray[j];

                        sortArray[j]=sortArray[j+1];

                        sortArray[j+1]=temp;

                    }

                }

                //动画排序过程

               animationSort(sortArray,sumtotal,container);

               index++;

               if(index<length)

                   setTimeout(bubble,200);

            }

 

            setTimeout(bubble,200);

        },

        //选择排序(外加动画效果)

        /**

         *

         * @param sortArray 数组

         * @param sumtotal 数组总和

         * @param container 动画容器(jQuery对象)

         */

        chooseSort:function(sortArray,sumtotal,container)

        {

            var length=sortArray.length;

            //记录最小值下标

            var min;

            //记录临时交换值

            var swap;

            var index=0;

            function switchData()

            {

               min=index;

                //选出最小值

                for(var j=index+1;j<length;j++)

                {

                    if(sortArray[min]>sortArray[j])

                        min = j;

                }

                //一次交换

                swap=sortArray[index];

                sortArray[index]=sortArray[min];

                sortArray[min]=swap;

                //动画排序过程

                animationSort(sortArray,sumtotal,container);

                index++;

                if(index<=length)

                    setTimeout(switchData,200);

            }

            setTimeout(switchData,200);

        },

        /**

         * 归并排序

         * @param sortArray  排序数组

         * @param sumtotal  数组总和

         * @param container 容器

         */

        mergeSort:function(sortArray,sumtotal,container)

        {

 

            function  merge(begin,mid,end)

            {

                var newarray=[];

                var cursor1=begin,cursor2=mid+1;

                var end1=mid,end2=end;

                var temp=0;

                while((cursor1<=mid)  && (cursor2<=end))

                {

                    if(sortArray[cursor1]<sortArray[cursor2])

                    {

                        newarray[temp]=sortArray[cursor1];

                        cursor1++;

                        temp++;

                    }else if(sortArray[cursor1]>sortArray[cursor2])

                    {

                        newarray[temp]=sortArray[cursor2];

                        cursor2++;

                        temp++;

                    }

                }

                while(cursor1<=mid)

                {

                    newarray[temp]=sortArray[cursor1];

                    cursor1++;

                    temp++;

                }

                while(cursor2<=end)

                {

                    newarray[temp]=sortArray[cursor2];

                    cursor2++;

                    temp++;

                }

                var incre=0;

                for(var i=begin;i<=end;i++)

                {

                    sortArray[i]=newarray[incre];

                    incre++;

                }

            }

            function  mSort(begin,end)

            {

                var mid= ~~((begin+end)/2);

                if(begin<end)

                {

                    mSort(begin,mid);

                    mSort(mid+1,end);

                    merge(begin,mid,end);

                    //动画排序过程

                    animationSort(sortArray,sumtotal,container);

               }

 

            }

            var begin=0;

            var length=sortArray.length;

            mSort(begin,length-1);

        }

 

    }

 

})();

  • 大小: 5.9 KB
分享到:
评论

相关推荐

    JavaScript排序算法动画演示效果的实现方法

    排序算法种类繁多,如冒泡排序、选择排序、插入排序等,每一种算法的实现细节略有差异,但动画演示的实现逻辑可以相互借鉴。 #### 实现方法概述 实现排序动画演示的方法主要包括以下几种: 1. **让JavaScript暂停...

    JS排序算法之冒泡排序,选择排序与插入排序实例分析

    除了上述基本排序算法,文档还提到了一些在线工具和网站,比如“在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具”,这些工具可以辅助学习者通过视觉化的方式理解排序算法的执行过程。 此外,文档还...

    Authware制作的数据结构课件打包下载(共26个排序算法)

    除了这些排序算法,还有其他23种排序方法未在文件名中列出,但可能包括经典的快速排序、插入排序、冒泡排序、选择排序以及高级算法如快速选择、希尔排序、归并插入排序等。这些课件通过SWF文件形式提供动态演示,使...

    《Hello 算法》:动画图解、一键运行的数据结构与算法教程.zip

    1. **排序算法**:冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,比较它们的时间复杂性和适用场景。 2. **查找算法**:线性查找、二分查找、哈希查找等,了解其效率差异。 3. **图算法**:深度优先...

    JavaScript实现的计算机科学算法.zip

    1. **排序算法**:如冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序。这些算法用于对数组进行有序排列,JavaScript中的Array.sort()方法就是基于某种排序算法实现的。 2. **搜索算法**:二分查找、线性...

    ble表格排序显示代码.rar_Table_ble表格排序显示代码_wetjz9

    基础的排序算法如冒泡排序、插入排序、快速排序等可能会被用到,但更可能使用的是更高效的算法,如归并排序或堆排序,尤其是对于大数据量的表格。 4. **动态更新DOM**:当用户点击表头时,排序算法会根据选定的排序...

    js,jQuery 排序的实现代码,网页标签排序的实现,标签排序.docx

    如果需要对大量数据进行排序,可以考虑先在服务器端完成排序,然后将排序好的数据发送给前端,或者使用更高效的排序算法,如快速排序或归并排序。另外,现代JavaScript框架如React、Vue等提供了虚拟DOM机制,它们在...

    sort-algo:排序可视化 Web 应用程序为每个人创建,以更好地学习和理解排序算法!

    可用算法: 冒泡排序插入排序选择排序归并排序快速排序堆排序壳排序计数排序基数排序桶分类调整可视化器的速度和数组大小有滑块可以调整可视化器的大小和速度。 速度范围为 1-10,大小范围为 5-25 或 1-10,具体取...

    jQuery实现的简单排序功能示例【冒泡排序】

    但在处理大规模数据时,效率较低,通常我们会选择更高效的排序算法如快速排序、归并排序等。 总的来说,这个示例展示了如何在jQuery环境中应用基础的排序算法,对于理解JavaScript编程以及冒泡排序的工作机制非常有...

    VisualSorting:JavaScript 排序算法可视化

    VisualSorting是一个基于JavaScript的项目,它通过动态动画的方式展示了多种经典的排序算法,使用户能够直观地理解排序过程。该项目的主要目的是帮助学习者更好地掌握各种排序算法的工作原理,提升编程技能,尤其是...

    mycode有关排序等内容

    常见的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等。每种算法都有其特点和适用场景,比如冒泡排序适合小规模数据,而快速排序则适用于大规模数据处理。通过分析“mycode”中的代码,我们...

    Algo-Web:多种排序算法的排序可视化和各种算法的算法逻辑

    排序算法包括但不限于冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。每种算法都有其独特的优缺点,适用于不同的场景。例如,冒泡排序简单但效率较低,适合小规模数据;快速排序平均性能优秀,但最坏...

    table排序

    标签“源码”暗示了可能讨论的是排序算法的实现细节,例如快速排序、归并排序、冒泡排序等。这些算法在计算机科学中至关重要,它们各有优缺点,适用于不同的场景。快速排序通常效率较高,而冒泡排序则相对简单,适用...

    排序算法可视化器

    在排序算法可视化器中,JavaScript不仅负责处理用户交互,还用于生成和更新排序过程的动画效果。 **主要排序算法** 该可视化器可能包含以下常见的排序算法: 1. **冒泡排序**:是最简单的排序算法之一,通过反复...

    C语言数据结构算法动画演示

    资源包可能包括了排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序等)、搜索算法(线性搜索、二分搜索等)以及图遍历算法(深度优先搜索DFS和广度优先搜索BFS)的动画演示。这些动态演示有助于用户直观...

    VisualJS:借助Javascript的几乎所有排序算法的可视化工具!

    这个工具涵盖了JavaScript中常见的排序算法,包括但不限于冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。通过视觉化的展示,用户可以直观地看到数据在排序过程中的变化,这对于学习和调试算法非常有...

    sorting-visualizer:排序算法可视化工具

    2. **排序算法实现**:`sorting-visualizer` 支持多种排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序、计数排序、基数排序等。每种算法都有其独特的性能特点和适用场景。 3. **动画展示**...

    js原生实现表格行的拖动排序

    可以使用冒泡排序、插入排序等算法,但考虑到性能,快速排序或归并排序可能更适合大数据量的情况。 7. **DOM更新**: 根据排序后的数据结构,重新渲染表格。可以删除所有行然后重新插入,或者更高效地只移动必要的...

    JS使用队列对数组排列,基数排序算法示例

    尽管这些工具并不直接关联到基数排序,但它们可以加深对其他排序算法(如快速排序、冒泡排序、归并排序等)的了解。 ### JavaScript排序算法相关资源 文章最后列出了一些JavaScript排序算法的资源,比如...

    Sorting-algo-Visualizer:使用HTMLCSS和Vanilla JS的简单排序算法可视化工具

    - **排序算法实现**:包括但不限于冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。每种算法都需要编写相应的函数来实现,然后在用户触发时调用。 - **动画效果**:在排序过程中,通过改变元素的...

Global site tag (gtag.js) - Google Analytics