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 发布文章使用:只允许注册用户才可以访问!
随机推荐
- UITableView 滚动到最后一行
if (self.tableView.contentSize.height > self.tableView.frame.size.height) { CGPoint offset = CGPo ...
- Install OpenCV3.0 on Eclipse
Neste artigo veremos como usar o OpenCV com Eclipse. Usaremos as versões mais recentes:OpenCV 3.0 ...
- 分享:三种取消选中单选框radio的方法
三种取消选中radio的方式,本文依赖于jQuery,其中第一种,第二种方式是使用jQuery实现的,第三种方式是基于JS和DOM实现的. <!DOCTYPE HTML> <html ...
- JS验证邮箱格式是否正确 实例代码
如何用js验证邮箱格式是否正确?分享一个例子.代码: /* *验证邮箱格式是否正确 *参数strEmail,需要验证的邮箱 */ function chkEmail(strEmail) { if (! ...
- struts2(六) 文件上传和下载
前面对文件下载提过一点点,这里正好要讲文件上传,就放在一起在说一遍. --WH 一.单文件上传 在没学struts2之前,我们要写文件上传,非常麻烦,需要手动一步步去获取表单中的各种属性,然后在进行相 ...
- Linux系统磁盘满解决方案
1.查看磁盘使用率 df -lh 执行结果: 2.定位最大文件目录 du -h --max-depth=1 执行结果: 3.定位最大文件 ls -lhS 执行结果: 4.备注 配合du -h --ma ...
- vim学习笔记(11):vim 去掉<200b>
vim查看文件,发现多了<200b>字符,使用/200b搜索匹配不上:grep 200b 也匹配不上 查询后才知道:200b是:Unicode Character 'ZERO WIDTH ...
- Android 编程下 TextView 添加链接的一种方式
通过如下这种方式给 TextView 添加的链接支持链接样式.点击事件.href 样式,代码如下: package cn.sunzn.tlink; import android.app.Activit ...
- Docker 入门(Mac环境)- part 4 swarms
part-4 Swarms 简介 这一节主要是介绍一下如何在集群模式下部署docker应用:集群的概念很好理解了,多台机器共同完成一项任务:和Hadoop那些集群一样,docker也相当于有一个管理机 ...
- 【转&参考】MySQL利用frm和ibd文件进行数据恢复
MySQL利用frm和idb文件进行数据恢复 源MySQL现状: 版本:5.6.* 存储引擎:innodb存储引擎 要恢复数据库:skill 重点要恢复表:slot_value 已有的文件: 备份了所 ...