排序算法总结(js代码实现,思想通用)
来源:互联网 发布:知喻经济发展讲座 编辑:程序博客网 时间:2024/05/16 23:33
<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>sort</title> <link rel="stylesheet" href=""></head><body> <script> //测试用例 var a=[1,3,8,2,6,9,7,13,25,45,18]; console.log(a); //1.冒泡排序 function bubbleSort(arr){ var len=arr.length; for(var i=0;i<len-1;i++){ for(var j=0;j<len-1-i;j++){ if(arr[j]>arr[j+1]){ //相邻元素比较 var temp=arr[j+1]; //两两交换 arr[j+1]=arr[j]; arr[j]=temp; } } } return arr; } //2.选择排序 function selectionSort(arr){ var len=arr.length; var minIndex,temp; for(var i=0;i<len-1;i++){ minIndex=i; for(var j=i;j<len-1;j++){ if(arr[j]<arr[minIndex]){ //寻找最小的数 minIndex=j; //保存最小数的索引 } } temp=arr[i]; //将找出的最小数与比较的数进行两两交换 arr[i]=arr[minIndex]; arr[minIndex]=temp; } return arr; } //3.插入排序 function insertionSort(arr){ var len=arr.length; var preIndex,current; for(var i=1;i<len;i++){ preIndex=i-1; //记录前一个位置 current=arr[i]; //记录当前位置的值 while(preIndex>0 && arr[preIndex]>current){ //当下标大于零时且要比较的值大于当前的值,将与当前值比较的值往后移 arr[preIndex+1]=arr[preIndex]; preIndex--; } arr[preIndex+1]=current; //循环结束时,将当前值插入对应的位置即可 } return arr; } //4.希尔排序 function shellSort(arr){ var len=arr.length; var gap=Math.floor(len/2); //步长或增量 while(gap>=1){ for(var i=gap;i<len;i++){ var temp=arr[i]; //记录当前要比较的值 for(var j=i-gap; j>=0 && temp<arr[j]; j=j-gap){ //循环递减步长长度与temp比较 arr[j+gap]=arr[j]; } arr[j+gap]=temp; } gap=Math.floor(gap/2); //改变步长 } return arr; //返回结果 } //5.归并排序 function mergeSort(arr){ //采用自上而下的递归方式 var len=arr.length; if(len<2){ //如果元素个数少于2个,则直接返回数组 return arr; } var middle=Math.floor(len/2), //一分为二,记录中间元素下标 left=arr.slice(0,middle), //以中间位置分的左边的数组 right=arr.slice(middle); //以中间位置分的右边的数组 return merge(mergeSort(left),mergeSort(right)); //递归调用 } function merge(left,right){ //传入两个参数,一个是左数组,一个是右数组 var result=[]; while(left.length && right.length){ //左边数组和右边数组必须都存在元素时 if(left[0]<=right[0]){ result.push(left.shift()); //如果左边数组第一个元素小,则取出左边数组中第一个元素,并放入结果数组中 }else{ result.push(right.shift()); //如果右边数组第一个元素小,则取出右边数组中第一个元素,并放入结果数组中 } } while(left.length){ //如果左边数组还有元素,则全部并入 result.push(left.shift()); } while(right.length){ result.push(right.shift()); //如果右边数组还有元素,则全部并入 } return result; //返回结果数组 } //6.快速排序 function quickSort(arr,low,high){ if(low<high){ var pos=qkPass(arr,low,high); //将参数传入函数,调用排序函数,并接受返回的基准值的索引 quickSort(arr,low,pos-1); //索引左边不包含索引位置,将左边划分的数组进行递归调用 quickSort(arr,pos+1,high); //索引右边不包含索引位置,将右边划分的数组进行递归调用 } return arr; //返回结果数组 } function qkPass(arr,low,high){ var base=arr[low]; //默认第一个元素为基准值 while(low<high){ while(low<high && arr[high]>base){ //从右边最高位置的元素与基准值进行比较,如果大于基准值,则自减一 --high; } arr[low]=arr[high]; //若找到比基准值小的元素,则将其赋值给arr[low] while(low<high && arr[low]<=base){ //从左边最低位置的元素与基准值进行比较,如果小于或等于基准值,则自加一 ++low; } arr[high]=arr[low]; //若找到比基准值大的元素,则将其赋值给arr[high] } arr[low]=base; //最后将基准值赋给arr[low] return low; //返回基准值所在位置的索引 } //测试 console.log(bubbleSort(a)); console.log(selectionSort(a)); console.log(insertionSort(a)); console.log(shellSort(a)); console.log(mergeSort(a)); console.log(quickSort(a,0,10)); </script></body></html>
想了解更多排序算法及其详情内容请点击此处!!!
阅读全文
0 0
- 排序算法总结(js代码实现,思想通用)
- 总结八大排序算法的基本思想与代码实现
- 排序算法思想和实现(代码)(一)
- 排序算法思想和实现(代码)(二)
- 排序--归并算法思想及其代码实现
- 排序算法思想总结
- 排序--快速排序算法的思想及其代码实现
- 经典内部排序算法学习总结(算法思想、可视化、Java代码实现、改进、复杂度分析、稳定性分析)
- 排序算法思想及代码
- js三大排序算法实现代码
- 各种排序算法思想总结
- 常用排序算法思想总结
- 各种排序算法思想总结
- 7大排序算法总结 JS 实现
- 各类排序算法总结(Java代码实现)
- 排序算法总结&&java代码实现
- 排序算法总结--C++代码实现
- 排序算法总结与代码实现
- Android Animation(动画)介绍
- 常见的浏览器兼容问题
- CCF CSP 公共钥匙盒 JAVA 201709-2 100分
- 动态规划--最大和子序列
- springMVC使用multipartFile上传文件出错:MultipartHttpServletRequest: is a MultipartResolver configured?
- 排序算法总结(js代码实现,思想通用)
- 51单片机模拟音乐详解
- HBuilder ng-的编程回车输入下方显示不重复
- macOSsierra安装U盘制作命令
- Hi3519V101开发环境搭建(二)
- spring管理实务回滚条件:抛出运行时异常的时候
- Postgresql Index —快速理解Index only scan
- blink跨线程解析html有点小问题
- SVM简单解析(21)---《深度学习》