用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) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...
随机推荐
- h5移动端-1
iphone3 : 设备分辨率 : 320*480 屏幕分辨率 : 320*480 iphone4 : 设备分辨率 : 320*480 屏幕分辨率 : 640*960 iphone5 : 设备分辨率 ...
- iOS 动画
图层树.寄宿图以及图层几何学(一)图层的树状结构 技术交流新QQ群:414971585 巨妖有图层,洋葱也有图层,你有吗?我们都有图层 -- 史莱克 Core Animation其实是一个令人误解的命 ...
- 让xterm更舒服的设置
转自:http://codespider.is-programmer.com/posts/25247.html X11相关的配置位于/etc/X11下. xterm的配置是/etc/X11/app-d ...
- 差分:IncDec Sequence 差分数组
突然就提到了这个东西,为了不再出现和去年联赛看见二分没学二分痛拿二等第一的情况,就去学了一下,基础还是比较简单的-- 先看一个经典例题: 给定一个长度为n的数列{a1,a2...an},每次可以选择一 ...
- ffmpeg 和 SDL 的结合使用
FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视 频的完整解决方案.它包含了非常先进的音频/视频编解码库 ...
- .Net Office开源组件
1.NPOI NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.使用 NPOI 你就可以在没有安装 Office 或者相应环 ...
- HTML 表格
HTML 表格:表格由<table>标签来定义,行数由<tr>标签来定义,单元格由<td>标签来定义:<table border="1"& ...
- android development
1. Supporting different devices 1) Supporting different screen size 主要有几点,首先是布局文件夹以及布局文件的命名 layout/m ...
- 自定义滚动条 - mCustomScrollbar
项目中需要使用自定义滚动条,但是试用了很多都功能不够全,今天发现一个比较全而且用法很简单的 -- mCustomScrollbar http://manos.malihu.gr/jquery-cust ...
- 简单配置和使用Maven
1,下载Maven 从:https://maven.apache.org/download.cgi 其实两个都一样, 2,安装过程 解压你下载的包,随意放哪里都可以 ,假设 我放在了 D:\JavaT ...