8大排序算法总结 JS 实现
//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 实现的更多相关文章
- [ 转载 ] js十大排序算法:冒泡排序
js十大排序算法:冒泡排序 http://www.cnblogs.com/beli/p/6297741.html
- 使用 js 实现十大排序算法: 快速排序
使用 js 实现十大排序算法: 快速排序 QuickSort 快速排序 /** * * @author xgqfrms * @license MIT * @copyright xgqfrms * @c ...
- 使用 js 实现十大排序算法: 桶排序
使用 js 实现十大排序算法: 桶排序 桶排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- 使用 js 实现十大排序算法: 计数排序
使用 js 实现十大排序算法: 计数排序 计数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- 使用 js 实现十大排序算法: 基数排序
使用 js 实现十大排序算法: 基数排序 基数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- 使用 js 实现十大排序算法: 冒泡排序
使用 js 实现十大排序算法: 冒泡排序 冒泡排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- 使用 js 实现十大排序算法: 希尔排序
使用 js 实现十大排序算法: 希尔排序 希尔排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- 使用 js 实现十大排序算法: 插入排序
使用 js 实现十大排序算法: 插入排序 插入排序 // 双重循环 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- 使用 js 实现十大排序算法: 选择排序
使用 js 实现十大排序算法: 选择排序 选择排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
随机推荐
- Unity投影器细节整理
抽了个空整理下投影器 一般投影器需要两张贴图,一张Cookie,一张FallOff. Unity提供Light和Multiple两种自带shader,和粒子类似. Cookie需要非alpha贴图,F ...
- PCIe简介及引脚定义
参考文章:http://www.2cto.com/os/201607/523581.html http://blog.csdn.net/michaelcao1980/article/details/4 ...
- 实现一个简单的虚拟demo算法
假如现在你需要写一个像下面一样的表格的应用程序,这个表格可以根据不同的字段进行升序或者降序的展示. 这个应用程序看起来很简单,你可以想出好几种不同的方式来写.最容易想到的可能是,在你的 JavaScr ...
- linux:文件及文件夹管理
http://blog.csdn.net/pipisorry/article/details/39854265 查看用户的信息 pika:~$id pikauid=1000(pika) gid=100 ...
- 我的IT之路2013(一)
一眨眼又到了写总结的时候了.废话不多说了,直接切入正题. 春节过后 从春节前开始大概半个月的时间就开始在TKY做物资管理项目,中间穿插了两个考试和J2EE的学习:结束TKY工作后继续深入学习J2EE, ...
- TimescaleDB比拼InfluxDB:如何选择合适的时序数据库?
https://www.itcodemonkey.com/article/9339.html 时序数据已用于越来越多的应用中,包括物联网.DevOps.金融.零售.物流.石油天然气.制造业.汽车.太空 ...
- redhat 6、7配置yum源
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # sed -i ' ...
- c++11实现c++14的optional
c++14中将包含一个std::optional类,它的功能和用法和boost的optional类似.optional<T>内部存储空间可能存储了T类型的值也可能没有存储T类型的值,只有当 ...
- windows下通过Chocolatey安装或升级node.js
以管理员身份运行windows PowerShell并安装Chocolatey 我的机器是windows10,可以在开始菜单->所有应用->W栏中找到Window PowerShell并运 ...
- FTP主动模式和被动模式的区别【转】
转自:http://www.cnblogs.com/xiaohh/p/4789813.html 基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口 ...