<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比较快速排序和合并排序的优劣的更多相关文章

  1. c++(合并排序)

    前面一篇博客提到的快速排序是排序算法中的一种经典算法.和快速排序一样,合并排序是另外一种经常使用的排序算法.那么合并排序算法有什么不同呢?关键之处就体现在这个合并上面.    合并算法的基本步骤如下所 ...

  2. JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  3. javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)

    javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...

  4. javascript 中合并排序算法 详解

    javascript 中合并排序算法 详解 我会通过程序的执行过程来给大家合并排序是如何排序的...  合并排序代码如下: <script type="text/javascript& ...

  5. java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述

    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...

  6. javascript数据结构与算法--高级排序算法

    javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...

  7. JavaScript版几种常见排序算法

    今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...

  8. 深入浅出数据结构C语言版(21)——合并排序

    在讲解合并排序之前,我们先来想一想这样一个问题如何解决: 有两个数组A和B,它们都已各自按照从小到大的顺序排好了数据,现在我们要把它们合并为一个数组C,且要求C也是按从小到大的顺序排好,请问该怎么做? ...

  9. 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)

    排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...

随机推荐

  1. Hadoop集群搭建安装过程(三)(图文详解---尽情点击!!!)

    Hadoop集群搭建安装过程(三)(图文详解---尽情点击!!!) 一.JDK的安装 安装位置都在同一位置(/usr/tools/jdk1.8.0_73) jdk的安装在克隆三台机器的时候可以提前安装 ...

  2. 《Android深度探索HAL与驱动开发》第二章阅读心得

    按照书中所讲的步骤,第一步先准备好搭建Android开发环境所需要的工具:JDK6或以上版本:Eclipse3.4或以上版本:ADT:CDT:Android SDK:Android NDK;交叉编译环 ...

  3. android 底层开发入门(一)

    第一个Linux驱动程序:统计单词个数 一.首先了解一下: 打印机驱动写入数据:对于打印机驱动来说,需要接收这些被写入的数据,并将它们通过PC的并口.USB等端口发送给打印机.要实现这一过程就需要Li ...

  4. mysql 联合索引和唯一索引

    一般来说.如果有where a=? and b=? and c=? 的语句. 如果表也有DML, 我一般只在a 上建索引.  这也是代价平衡的结果. 一方面 只在a 上建索引那么是 index ran ...

  5. 《C与指针》第十二章练习

    本章例程 //12.3 #include <stdio.h> #include <stdlib.h> typedef struct NODE{ struct NODE *lin ...

  6. 获取应用程序信息.h

    ////  获取应用程序信息.h//  IOS笔记// 一般会用来判断是否有新版本.是否需要强制更新 iOS的版本号,一个叫做Version,一个叫做Build,这两个值都可以在Xcode 中选中ta ...

  7. lua Getter&Setter简单实现

    lua是一门简单的语言,不带类和属性封装,但可以使用lua强大的元表模拟实现: class.lua local type = type local rawset = rawset local setm ...

  8. 【转】MAPI over HTTP协议

    这是一篇非常详细和精彩的介绍MAPI over HTTP协议英文博文.原文地址如下: http://blogs.technet.com/b/exchange/archive/2014/05/09/ou ...

  9. mongodb 对内嵌文档(数组) group分页查询,并设置查询条件

    文档示例Account的其中一条记录: // collection: Account { "_id" : ObjectId("5843e38e535f3708f759b2 ...

  10. Linux下使用ping快速检测存活主机

    该shell脚本主要是通过ping来批量检测网段内存活主机,执行结果保存在脚本当前目录下的IPinfor目录中,写的比较匆忙,希望大家留下更好的建议. #!/usr/bin/env bash##### ...