日常开发过程中,我们最常使用到的算法就是排序算法,最常用的排序算法例如选择排序,冒泡排序,归并排序,快速排序,二叉排序,堆排序等,周末闲来无事,刚好回顾下这些算法,并将其中的选择排序,冒泡排序和归并排序,以动画的方式展示,话不多说,先上动画截图,在上代码
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);
}
}
})();
相关推荐
7大排序算法(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)实现源码
各种排序算法的实现函数:包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序。 查找最大最小值函数 findMinMax:在给定数组中查找最大值和最小值。 计算平均值...
各种常用c++排序算法,包括插入排序、冒泡排序、选择排序、快速排序、归并排序、希尔排序等
直接插入排序 冒泡排序 快速排序 直接选择排序 堆排序 二路归并排序 C#源代码 使用C#实现的数据结构中的排序算法
采用c++描述了各种排序算法,包括选择排序 冒泡排序 插入排序 基数排序 快速排序 归并排序 。实验内容 1、创建排序类。 2、提供操作:选择排序、冒泡排序、插入排序、*基数排序、*快速排序、*归并排序。 3、*能够...
JAVA排序算法: 直接插入,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,包括算法的详细介绍,以及对几种算法的详细测试
本文件是7种常用排序算法的实现(C++),包括冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序以及快速排序。代码详细有注释且有测试用例。
选择排序,冒泡排序,插入排序 基数排序,快速排序,归并排序
选择排序 冒泡排序 插入排序 合并排序 快速排序算法原理及代码实现 不同排序算法时间效率的经验分析方法 验证理论分析与经验分析的一致性 当面临巨大数据量的排序的时候,还是优先选择合并排序算法和快速排序算法。...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
使用c语言比较几种常用排序的使用时间(归并排序、插入排序、归并排序、冒泡排序、选择排序)
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
在这份文档中,我用C语言实现了排序算法的多种方法,包括插入排序、选择排序、冒泡排序、希尔排序、归并排序、快速排序、桶排序和基数排序。这些算法可以帮助我们对数据进行有效的排序和整理,以便更好地处理和分析...
选择排序 归并排序 冒泡排序 堆排序 快速排序 等排序算法c++实现以及其效率比较 包括源代码
经典排序算法,有选择排序,冒泡排序,交换排序,谢尔排序,插入排序基数排序
博客地址:https://blog.csdn.net/qq_30259857/article/details/81071081 冒泡排序,选择排序,插入排序,归并排序,快速排序的 Unity Demo
数据结构(c语言版)严蔚敏 吴伟民编著 中直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现、归并排序,使用c语言实现
源程序给出了插入排序、选择排序、希尔排序、堆排序、冒泡、双向冒泡、快速排序、归并排序、递归的归并排序、基数排序等多种排序算法,其中有17处需要填空。
printf("\t6: 归并排序\n"); printf("\t7: 希尔排序\n"); printf("\t***************************\n"); scanf("%d",&i); //输入整数1-7,选择排序方式 switch (i){ case 1: InsertSort(R); break; //值为1,...
C语言算法之归并排序C语言算法之归并排序C语言算法之归并排序C语言算法之归并排序