用javascript比较快速排序和合并排序的优劣
<script>
//用来调用排列方法的类
function arr_sort(arr){
var startTime,endTime;
var priv_arr = new Array; for(var key in arr){
priv_arr.push(arr[key]);
} this.get_arr = function(){
return priv_arr
} //快速排序
this.sort1 = function(){
startTime = new Date().getTime();
quickSort(0,priv_arr.length-1);
endTime = new Date().getTime();
} function swap(l,r){
var temp = priv_arr[l];
priv_arr[l] = priv_arr[r];
priv_arr[r] = temp;
} function quickSort(left,right){
if(left<right){
var i=left-1;
var last = priv_arr[right];
var j = right;
while(true){
while(priv_arr[++i] < last);
while(j>0){
if(priv_arr[--j] <= last)break;
}
if(i>=j)break;
swap(i,j)
}
swap(i,right);
quickSort(left,i-1);
quickSort(i+1,right);
}
}
//合并排序
this.sort2 = function(){
startTime = getCurrTime();
merge_split(priv_arr,0,priv_arr.length-1);
endTime = getCurrTime();
} function merge_split(arr,left,right){
if(left >= right){
return;
}
var middle=(left+right)>>>1;
//document.write(left+"\t"+middle+"\t"+right+"<br>");
merge_split(arr,left,middle);
merge_split(arr,middle+1,right);
merge(arr,left,right,middle);
} function merge(arr,l,r,m){
var i =l;
var j =m+1;
//document.write(l+"\t"+m+"\t"+r+"<br>");
while(i<j&&j<=r){
//document.write("$$"+i+"\t"+"\t"+j+"<br>");
if(arr[i]>arr[j]){
var t = arr[j];
for(var k=j;k>i;k--){
arr[k]=arr[k-1];
}
arr[i]=t;
//document.write("####"+priv_arr.toString()+"<br>");
j++;
}
i++;
}
//document.write(priv_arr.toString()+"<br>");
} function getCurrTime(){
return new Date().getTime();
}
this.getExTime = function(){
document.write(startTime+" "+endTime+"<br>");
return endTime - startTime;
}
} //用来生成随即数组的函数
function random_array(size){
var arr = new Array;
for(var i=0;i<size;i++){
arr.push(parseInt(Math.random()*100));
}
return arr;
} var arr_test = random_array(3000);
document.write(arr_test.toString()+"<br>"); var sort1 = new arr_sort(arr_test);
var sort2 = new arr_sort(arr_test);
var dur_time;
sort1.sort1();
var my_arr1 = sort1.get_arr();
sort2.sort2();
var my_arr2 = sort2.get_arr();
document.write("quick_sort:<br>");
document.write(my_arr1.toString()+"<br>");
document.write("Time:"+sort1.getExTime()+"<br>");
document.write("merge_sort:<br>");
document.write(my_arr2.toString()+"<br>");
document.write("Time:"+sort2.getExTime()+"<br>");
document.write(arr_test.toString()+"<br>");
</script >
用javascript比较快速排序和合并排序的优劣的更多相关文章
- c++(合并排序)
前面一篇博客提到的快速排序是排序算法中的一种经典算法.和快速排序一样,合并排序是另外一种经常使用的排序算法.那么合并排序算法有什么不同呢?关键之处就体现在这个合并上面. 合并算法的基本步骤如下所 ...
- JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
- javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)
javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...
- javascript 中合并排序算法 详解
javascript 中合并排序算法 详解 我会通过程序的执行过程来给大家合并排序是如何排序的... 合并排序代码如下: <script type="text/javascript& ...
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...
- javascript数据结构与算法--高级排序算法
javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...
- JavaScript版几种常见排序算法
今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...
- 深入浅出数据结构C语言版(21)——合并排序
在讲解合并排序之前,我们先来想一想这样一个问题如何解决: 有两个数组A和B,它们都已各自按照从小到大的顺序排好了数据,现在我们要把它们合并为一个数组C,且要求C也是按从小到大的顺序排好,请问该怎么做? ...
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...
随机推荐
- git提交远程仓库命令
在已有的git库中搭建新库,并且将本地的git仓库,上传到远程服务器的git库中,从而开始一个新的项目 首先,在本地新建文件夹abc,进入到abc里面,然后git init.这样就在本地初始化了一个g ...
- android中加载的html获取的宽高不正确
wap页面使用 js库是zepto,按照惯例在$(function(){})中,来获取当前可视区的宽高,但得到的宽高却与预想的相差十万八千里. 原本android手机的浏览器设定的宽高基本是360*6 ...
- 关于CSS初步入门简述1
关于CSS的简介可以自行百度,本篇只考虑内容 首先关于CSS会由浅入深,写在前面的有很多不严谨,只是为了引出后文所写.不过如果谬误较大,敬请指正! 1.大部分的代码要写在之中 简单的例子: <b ...
- spring logback 配置
<appender name="DubboInfo" class="ch.qos.logback.core.rolling.RollingFileAppender& ...
- 用shebang编写一个ssh自动登陆脚本
单例模式是软件开发中非常普遍的一种模式.它的主要作用是确保系统中,始终只存在一个类的实例对象. 这样做的好处有两点: 1.对于需要频繁使用的对象,在每次使用时,如果都需要重新创建,并且这些对象的内容都 ...
- chosen组件实现下拉框
chosen组件用于增强原生的select控件,使之有更好的用户体验.官方demo https://harvesthq.github.io/chosen/ 目前项目中碰到的使用,比如一个页面中有两个不 ...
- c# foreach循环二维数组
假设已有二维数组 array 行4, 列4for(int i=0;i<4;i++)//行的行数{ for(int j=0;j<4;j++)//行的列数 { console.wrie( ar ...
- Oracle 11.2.0.1的一个Bug,客户端报ORA-03113: 通信通道的文件结尾
半小时前,一个项目反馈应用系统部分功能报错,ORA-03113: 通信通道的文件结尾.好像是个常见的错误. 异常信息:ORA-03113: 通信通道的文件结尾 进程 ID: 2392 会话 ID: 2 ...
- mysql授权登录用户
创建用户并授权 CREATE USER 'voctrals'@'%' IDENTIFIED BY 'some_password'; 允许远程访问 GRANT ALL PRIVILEGES ON *.* ...
- 打开页面自动打开QQ的javascript代码
今天浏览个网站,发现我的QQ突然自动启动了,起初还以为中病毒了,后来找了半天无果,反而发现了几个无需启动的系统服务进程,遂管之. 后来打开网站的页面的源代码,发现一段javascript脚本,才知道我 ...