//bubble sort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function bubbleSort(arr,comp){
 
 
for(var i = 0;i < arr.length; i++){
for(var j = 0; j < arr.length - i - 1; j++){
if(comp(arr[j],arr[j+1])){
exch(arr,j,j+1);
}
}
}
 
 
}
 
 
function exch(a,i,j){
var tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
 
 
var input = new Array(5,1,4,2,3);
bubbleSort(input,function(a,b){return a > b;});
console.log(input);
 
 
input = new Array(5,1,4,2,3);
bubbleSort(input,function(a,b){return a < b;});
console.log(input);

//selection sort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function selectionSort(arr,comp){
 
 
for(var i = 0;i < arr.length ; i++){
for(var j = i;j < arr.length ; j++){
if(comp(arr[i],arr[j])) { exch(arr,i,j); }
}
}
 
 
}
 
 
function exch(a,i,j){
var t = a[i];
a[i] = a[j];
a[j] = t;
}
 
 
var input = new Array(5,1,4,2,3);
selectionSort(input,function(a,b){return a > b;});
console.log(input);
 
 
input = new Array(5,1,4,2,3);
bubbleSort(input,function(a,b){return a < b;});
console.log(input);

//insert sort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function insertSort(arr,comp){
var result = new Array();
for(;arr.length > 0;){
 
 
var inserted = false;
for(var j = 0;j < result.length; j++){
if(comp(result[j],arr[0])) { insert(result,j,arr[0]); inserted = true; break;}
}
if(!inserted){insert(result,result.length,arr[0]);}
arr.splice(0,1);
}
return result;
}
 
 
function insert(arr,i,v){
arr.splice(i,0,v);
}
 
 
var input = new Array(5,1,4,2,3);
var ret = insertSort(input,function(a,b){return a > b;});
console.log(ret);
 
 
var input = new Array(5,1,4,2,3);
ret = insertSort(input,function(a,b){return a < b;});
console.log(ret);

//shell sort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function shellSort (a,comp) {
    for (var h = a.length; h = parseInt(h / 2);) {
        for (var i = h; i < a.length; i++) {
            var k = a[i];
            for (var j = i; j >= h && comp(k, a[j - h]); j -= h)
                a[j] = a[j - h];
            a[j] = k;
        }
    }
    return a;
}
 
 
var arr =new Array(7,9,2,5,4,1,3);
var r = shellSort(arr,function (a,b){return a > b;});
console.log(r);

//merge sort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function mergeS(arr,comp){
 
 
if(arr.length == 1){return arr;}
 
 
var mid = arr.length / 2 | 0;
var leftArr = new Array();
var rightArr = new Array();
for(var i = 0;i < mid;i ++){
leftArr.push(arr[i]);
}
 
 
for(var j = mid;j < arr.length; j++){
rightArr.push(arr[j]);
}
 
 
console.log("before : " + leftArr + " | " + rightArr);
var leftRet = mergeS(leftArr,comp);
var rightRet = mergeS(rightArr,comp);
 
 
var r = merge(leftRet,rightRet,comp);
return r;
}
 
 
function merge(leftArr,rightArr,comp){
 
 
var ret = new Array();
var i = j = 0;
for(;i < leftArr.length && j < rightArr.length; ){
if(comp(leftArr[i],rightArr[j])){ret.push(leftArr[i]); i ++}
else {ret.push(rightArr[j]); j ++}
}
 
 
for(;i < leftArr.length;){
ret.push(leftArr[i]);i++;
}
for(;j< rightArr.length; ){
ret.push(rightArr[j]);j++;
}
 
 
return ret;
 
 
}
 
 
var r = mergeS(new Array(0,6,5,1,2,4,3,9),function(a,b){return a > b;});
console.log(r);

//quick sort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function quickS(arr,lo,hi,comp){
if(lo >= hi){return ;}
 
 
var stub = arr[lo];
 
 
var i = lo + 1;
var j = hi;
 
 
for(;i < j ;){
for(;i < j && !comp(stub,arr[j]);j--);
for(;i < j && comp(stub,arr[i]);i++);
 
 
if(i >= j){break;}
 
 
var t = arr[i];
arr[i] = arr[j];
arr[j] = t;
 
 
j--;
i++;
}
 
 
if(comp(arr[lo],arr[i])){
var t = arr[lo];
arr[lo] = arr[i];
arr[i] = t;
}
 
 
quickS(arr,lo,i-1,comp);
quickS(arr,i,hi,comp);
}
 
 
var input = new Array(22,3,10,66,15,11,2,4,31,9);
quickS(input, 0, input.length - 1,function(a,b){return a > b;});
console.log(input);

//heap sort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var ret = new Array();
function heapS(arr,comp){
if(arr.length == 0){return ;}
var i = arr.length / 2 | 0 ;
for(;i >= 0; i--){
if(comp(arr[i], arr[i * 2])){exch(arr, i, i*2);}
if(comp(arr[i], arr[i * 2 + 1])) {exch(arr, i, i*2 + 1);}
}
ret.push(arr[0]);
arr.splice(0,1);
heapS(arr,comp);
}
 
 
function exch(arr,i,j){
var t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
 
 
heapS(new Array(16,22,91,0,51,44,23),function (a,b){return a > b;});
console.log(ret);

 

8大排序算法总结 JS 实现的更多相关文章

  1. [ 转载 ] js十大排序算法:冒泡排序

    js十大排序算法:冒泡排序  http://www.cnblogs.com/beli/p/6297741.html

  2. 使用 js 实现十大排序算法: 快速排序

    使用 js 实现十大排序算法: 快速排序 QuickSort 快速排序 /** * * @author xgqfrms * @license MIT * @copyright xgqfrms * @c ...

  3. 使用 js 实现十大排序算法: 桶排序

    使用 js 实现十大排序算法: 桶排序 桶排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  4. 使用 js 实现十大排序算法: 计数排序

    使用 js 实现十大排序算法: 计数排序 计数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  5. 使用 js 实现十大排序算法: 基数排序

    使用 js 实现十大排序算法: 基数排序 基数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  6. 使用 js 实现十大排序算法: 冒泡排序

    使用 js 实现十大排序算法: 冒泡排序 冒泡排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  7. 使用 js 实现十大排序算法: 希尔排序

    使用 js 实现十大排序算法: 希尔排序 希尔排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  8. 使用 js 实现十大排序算法: 插入排序

    使用 js 实现十大排序算法: 插入排序 插入排序 // 双重循环 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  9. 使用 js 实现十大排序算法: 选择排序

    使用 js 实现十大排序算法: 选择排序 选择排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

随机推荐

  1. ssm redis 数据字典在J2EE中的多种应用与实现

    数据字典在项目中是不可缺少的“基础设施”,关于数据字典如何设计如何实现,今天抽空讲一下吧 先看一下表设计: 通过自定义标签来实现页面的渲染: public class DataDictValueTag ...

  2. 防CSRF攻击:一场由重复提交的问题引发的前端后端测试口水战

    重复提交,这是一直以来都会存在的问题,当在网站某个接口调用缓慢的时候就会有可能引起表单重复提交的问题,不论form提交,还是ajax提交都会有这样的问题,最近在某社交app上看到这么一幕,这个团队没有 ...

  3. ios--网页js调用oc代码+传递参数+避免中文参数乱码的解决方案(实例)

    此解决方案原理: 1.在ViewController.h中声明方法和成员变量,以及webView的委托: // //  ViewController.h //  JS_IOS_01 // //  Cr ...

  4. Modelsim添加Lattice库

    Step 1 安装好modelsim,并将modelsim的目录添加到系统PATH中. (确认方法:在任意位置同时按下Shift+鼠标右键,在出来的菜单里选择“在此处打开命令窗口”,然后输入vsim, ...

  5. 【Unity】7.5 移动设备输入

    分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 在iOS和Android系统中,操作都是通过触摸来完成的.Input类中对触摸操作的方法或变量如下图所示: 通过GetT ...

  6. tengine 的优化

    查服务器CPU的核数 : [root@c01 conf]# grep processor /proc/cpuinfo |wc -l 4 [root@c01 conf]# grep -c process ...

  7. Chrome浏览器在Windows 和 Linux下的键盘快捷方式

    Windows 键盘快捷键 标签页和窗口快捷键 Ctrl+N 打开新窗口. Ctrl+T 打开新标签页. Ctrl+Shift+N 在隐身模式下打开新窗口. 按 Ctrl+O,然后选择文件. 通过 G ...

  8. Tornado使用-简介

    1.什么是Tornado Tornado是一个python web框架,和一个异步网络通信库. 因为它的非阻塞网络IO,可同时支撑万级别的连接请求. 适用于长轮询,全双工websocket通信. 2. ...

  9. (原)docker安装

    2018直接看这里: https://docs.docker.com/cs-engine/1.12/#install-on-ubuntu-1404-lts-or-1604-lts 以下为原文: 网上的 ...

  10. 【架构】MVC模式

    架构模式 如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论. MVC模式就是架构模式的一种,它不仅适用于 ...