日期:2014-05-16  浏览次数:20522 次

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;

? ? ? ? ? ? //记录