js实现常见的三种排序方法(冒泡排序、快速排序、归并排序)
2018-01-04 19:26
731 查看
1、冒泡排序(升序): 比较相邻的数,依次找出较大的数往后放;具体原理:冒泡排序原理
function popSort(arr){ let length = arr.length; if(length>1){ //n个数的数组需要排序(n-1)轮 for(let i=0;i<length-1;i++){ //每一轮比较的次数逐次递减 for(let j=0;j<length-1-i;j++){ let a =0; if(arr[j]>arr[j+1]){ a =arr[j]; arr[j] =arr[j+1]; arr[j+1] =a; } } } } return arr; }2、快速排序步骤:找基准数(随机数找)=>遍历数组,小于基准数放左边,大于放右边=>对左右两边的子序列重复上述操作; 具体原理:快速排序原理
function quickSort(arr){ let length =arr.length; if(length<=1){ return arr;} //找到基准点并删除该数 let index = Math.floor(length/2), base= arr.splice(index,1)[0],left=[],right=[]; //把数组按基准点分成两个子数组 for(let i=0;i<arr.length;i++){ let val = arr[i]; if(val>base){ right.push(val);} else{ left.push(val);} } //递归 return quickSort(left).concat([base],quickSort(right)); }3、归并排序:将数组分为两个子数组,重复此操作直到所有的子数组都只含有一个元素,然后从底部开始两两合并;合并与分割同时进行;具体原理:归并排序原理
function mergeSort(arr){ let length = arr.length; if(length<=1|| (!Array.isArray(arr))){return arr;} //分割数组 let mid = Math.floor(length/2); let left = arr.slice(0,mid); let right = arr.slice(mid); return mergeArr(mergeSort(left),mergeSort(right)) ; } //合并数组 function mergeArr(left,right){ let result =[]; while(left.length>0&&right.length>0){ if(left[0]<right[0]){ result.push(left.shift()); }else{ result.push(right.shift()); } } return result.concat(left,right); } let array1 = [10,2,1,7,12,5,9,0]; console.log(mergeSort(array1))//返回[0, 1, 2, 5, 7, 9, 10, 12]
相关文章推荐
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 算法第三次作业(1. 排序。对文件 largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW
- 常见排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 【快速排序】QuickSort(三种实现方法)c++描述
- 选择排序、冒泡排序、插入排序、基数排序、快速排序、归并排序完整C++实现
- 用JS实现冒泡排序、插入排序、选择排序、快速排序
- 几种基本的排序算法(选择排序,冒泡排序,快速排序,归并排序,希尔排序)C语言实现
- js实现常见排序方法
- Java常见排序:冒泡排序、快速排序、选择排序、插入排序、归并排序
- 【程序员笔试面试必会——排序①】Python实现 冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序
- Java实现冒泡排序、快速排序、选择排序、插入排序和归并排序
- 快速排序三种实现方法
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——JAVA实现
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- Python实现冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法(基于《算法导论》伪代码)
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)