常用排序方法
来源:互联网 发布:黑魔盒 淘宝 编辑:程序博客网 时间:2024/05/16 08:21
冒泡排序 时间复杂度 n²,稳定
每两个相邻的元素比较大小,大的放后面
function BubbleSort() { var arr = [3,2,5,8,4,7,6,0,9,1]; for( i=0 ; i<arr.length ; i++ ) { for( j=0 ; j<arr.length ; j++ ) { if(arr[i] < arr[j]) { num = arr[i]; arr[i] = arr[j]; arr[j] = num; } } console.log(arr); } } BubbleSort();
快速排序 时间复杂度 n㏒₂n,不稳定
找一个基准值,遍历数组将数组中小于基准值的数组成一个数组放在基准值左边,大于基准值的数组成一个数组放在基准值右边,再让分别让左边数组和右边数组调用函数quickSort。
function quickSort(arr) { if (arr.length <= 1) { return arr; } var pivotIndex = Math.floor(arr.length / 2); var pivot = arr.splice(pivotIndex, 1)[0];//找一个基准值 var left = []; var right = []; for (var i = 0; i < arr.length; i++){ if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([pivot], quickSort(right)); }; var array = [3,2,5,8,4,7,6,0,9,1]; console.log(quickSort(array));
插入排序 时间复杂度为n²,稳定
在数组中选择一个基准值放在新数组里,然后依次用数组中的数与之作比较,比其小的放在新数组的元素左边,比其大的放在值的右边,第二次与之作比较完还要再进行一次循环,判断它的大小(与新数组最后一个值或者第一个值比较),使其放在合适的位置。
function InsertSort() { var org = [5, 4, 3, 2, 1, 6, 7, 9, 8, 10]; var tempArr = new Array(); for (var i = 0; i < org.length; i++) { if (i == 0) { tempArr[0] = org[0]; //把第一个元素放到新序列 } else { for (var j = 0; j < tempArr.length; j++) { if (org[i] > tempArr[j]) { //如果是新序列的最后一个元素,则插入 if (j == tempArr.length - 1) { tempArr[j + 1] = org[i]; break; } else {//如果不是最后一个元素,则往后移动 continue; } } else { //移动新序列、然后插入 for (var k = tempArr.length - 1; k >= j; k--) { tempArr[k + 1] = tempArr[k]; } tempArr[j] = org[i]; break; } } } } console.log(tempArr); } InsertSort();
直接选择排序 时间复杂度为n²,不稳定
遍历数组,找到最小的数的下标,然后判断其是不是第一个数,如果不是更第一个数交换位置,以此类推。这样选择排序的每个最小值的筛选.只需要一次元素的交换。
function choseSort() { var arr = [3,2,5,8,4,7,6,0,9,1]; for(var j=0 ; j<arr.length ; j++){ var min = arr[j]; var num = j; //找到最小值 for(var i=j ; i<arr.length ; i++ ){ if(min > arr[i]){ min = arr[i]; } } //找到最小值的序号 for(var i=j ; i<arr.length ; i++ ){ if(min == arr[i]){ num = i; } } //交换第一个值和最小值 arr[num]=arr[j]; arr[j]=min; } console.log(arr); } choseSort();
归并排序 时间复杂度为n㏒₂n,稳定
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
var arr = [3,2,5,8,4,7,6,0,9,1];function merge(left, right) { var re = []; while(left.length > 0 && right.length > 0) { if(left[0] < right[0]) { re.push(left.shift()); } else { re.push(right.shift()); } } /* 当左右数组长度不等.将比较完后剩下的数组项链接起来即可 */ return re.concat(left).concat(right);}function mergeSort(array) { if(array.length == 1) return array; /* 首先将无序数组划分为两个数组 */ var mid = Math.floor(array.length / 2); var left = array.slice(0, mid); var right = array.slice(mid); /* 递归分别对左右两部分数组进行排序合并 */ return merge(mergeSort(left), mergeSort(right));} console.log(mergeSort(arr));
1 0
- 常用的排序方法
- 常用排序方法(C#)
- 常用排序方法实现
- Oracle 常用 排序方法
- 排序方法,常用
- 常用排序方法
- 常用排序方法介绍
- 常用排序方法
- 常用排序方法代码
- 常用排序方法
- 常用排序方法(珍藏)
- 常用排序方法(一)
- 常用几种种排序方法!
- 常用排序方法(一)
- 常用排序方法(二)
- 常用排序方法(C语言)
- Java常用的排序方法
- 常用查找与排序方法
- 第三方yum源安装后,之后用于安装的是哪个yum源
- Java学习历程(5):对象实例化的认识 对象和对象引用
- extern关键字讲解
- css rem 的理解
- JavaScript及下半年的工作
- 常用排序方法
- bzoj 1455 左偏树+并查集
- 模拟鼠标移动程序实现——解决域控制器策略强制电脑锁屏问题
- 我的Erlang之路
- POJ 1125 Stockbroker Grapevine floyd水题
- 一个执行计划异常变更的案例 - 外传之SQL Profile(下)
- SQL笔记
- 容器map的应用:CodeForces - 501B
- P1308 统计单词数