<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. html5基础知识点

    1.WEB基础知识 1.WEB 与 Internet 1.Internet 互联网 若干台计算机 通过 网线 所连接而成的物理设备 主要服务: 1.Telnet 2.Email 3.WWW(Word ...

  2. 简单的 JSON 对象进行深拷贝最简单的方法

    var json = { a: 123, b: '456' }; var json2 = JSON.parse(JSON.stringify(json)); 只需要先使用 JSON.stringify ...

  3. Mac使用wireshark对移动设备抓包

    在系统偏好设置中,打开蓝牙共享网络,就能让移动设备通过连接蓝牙来访问网络,这个途径访问都会被wireshark所抓 然后捕获接口中可选 设置 筛选 为 http and (ip.src == 192. ...

  4. pyside 为窗口添加图片

    有时我们需要添加一些图片到窗口上,下面给一个通过QLable实现的方法. 这里需要注意的是,当你启用多线程时,方法调用的setPixmap,会导致qt报出一个线程安全错误. 因此,让这个绘图工作尽量在 ...

  5. 鼠标光标聚焦到可编辑div的最末尾

    <p> <div id='text' contenteditable=true style='width:100px;height:100px;border:1px #ccc;'&g ...

  6. WIFI基本知识整理

    这里对wifi的802.11协议中比较常见的知识做一个基本的总结和整理,便于后续的学习.因为无线网络中涉及术语很多,并且许多协议都是用英文描述,所以有些地方翻译出来会有歧义,这种情况就直接英文来描述了 ...

  7. 利用C语言获得网页编码

    #include <stdio.h> #include <winsock.h> #include <string.h> #pragma comment(lib, & ...

  8. logrotate机制与原理[转载]

    http://blog.lightxue.com/how-logrotate-works/ 日志实在是太有用了,它记录了程序运行时各种信息.通过日志可以分析用户行为,记录运行轨迹,查找程序问题.可惜磁 ...

  9. yii框架中的一些小细节配置问题

    1.查看运行时间'db'=>array(      'connectionString' => 'mysql:host=localhost;dbname=shop',      'emul ...

  10. C# 下载搜狗词库

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); string[] userAgent = new string[]{& ...