javascript实现数据结构中的基本排序方法
来源:互联网 发布:mac开机客人用户 编辑:程序博客网 时间:2024/05/22 02:19
简要介绍:基本排序方法,不外乎为冒泡法排序法,插入排序法,选择排序法,归并排序法和快速排序法。
1.冒泡排序法
原理:比较任何相邻的项,如果第一个比第二个大,则交换它们,元素相步步上移,最大的元素依次沉底。
//来一个冒泡排序function bobbleSort(myArr){ var length=myArr.length; for(var i=0;i<length;i++){ for(var j=0;j<length-1;j++){ if(myArr[j]>myArr[j+1]){ var temple=myArr[j]; temple=myArr[j+1]; myArr[j+1]=myArr[j]; myArr[j]=temple; } } } return myArr;}
改进后的冒泡:内循环减去外循环中已经跑过的轮次,就可以闭环内循环中不必要的比较
//改进后的冒泡排序,可以少比较几次,修改length-1-i可以减少比较次数function upBobbleSort(myArr){ var length=myArr.length; for(var i=0;i<length;i++){ for(var j=0;j<length-1-i;j++){ if(myArr[j]>myArr[j+1]){ var temple=myArr[j+1]; myArr[j+1]=myArr[j]; myArr[j]=temple; } } } return myArr; }
2.选择排序法
原理是原址比较的排序,每次循环取到本次的最小值,依次放在首位等
//选择排序法,原理:每次先选择最小的那个放在首部,依次迭代function selectSort(myArr){ var length=myArr.length||0; for(var i=0;i<length;i++){ var minIndex=i; for(var j=i;j<length;j++){ if(myArr[j]<myArr[minIndex]){ var temple=myArr[j]; myArr[j]=myArr[minIndex]; myArr[minIndex]=temple; } } } return myArr;}
3.插入排序法
原理:每次排一个数组项,并且依次比较前面已经排好的数组,决定新的数组应该插入的位置
//插入排序法,第一项已经排好序或者前n项已经排好序,新到一项插入即可function insertionSort(myArr){ var length=myArr.length||0; for(var i=1;i<length;i++){ var temple=myArr[i], j=i; while(myArr[j-1]>temple&&j>0){ myArr[j]=myArr[j-1]; j--; } myArr[j]=temple; } return myArr;}
4.归并排序
原理:是一种分治算法,将原始数组分成较小的,接着将小的数组合并成较大的
//分组排序法,归并排序法function mergeSortRec(myArr){ var mid=Math.floor(myArr.length/2); if(myArr.length==1){ return myArr; } var left=myArr.slice(0,mid); var right=myArr.slice(mid); return merge(mergeSortRec(left),mergeSortRec(right));}function merge(left,right){ var result=[], il=0, ir=0; while(il<left.length&&ir<right.length){ if(left[il]>right[ir]){ result.push(right[ir]); ir++ }else{ result.push(left[il]); il++ } } while(il<left.length){ //有一些超过俩俩比较的需要额外的手动添加 result.push(left[il++]); } while(ir<right.length){ result.push(right[ir++]); } return result;}
5.快速排序法
(1)选择主元
(2)划分数组,进行左右指针比较
(3)依次循环
//快速排序法function quickSort(myArr,left,right){ //left表示起始的节点,right表示结束的节点~ var index, array=myArr; if(array.length>1){ index=partion(array,left,right); if(left<index-1){ quickSort(array,left,index-1); } if(index<right){ quickSort(array,index,right); } return array; }}function partion(array,left,right){ var mid=Math.floor((left+right)/2), il=left, ir=right; while(il<=ir){ while(array[il]<array[mid]){ il++ } while(array[ir]>array[mid]){ ir--; } //交换 if(il<=ir){ var temple; temple=array[il]; array[il]=array[ir]; array[ir]=temple; il++; ir--; } } return il;}
6.补充
排好序的数组,可以通过二分法实现快速的查找(这里我们假定数组已经从小到大的排好序了)
(1)选择数组的中间值
(2)如果中间值是待搜索值,那么结束
(3)如果比待搜索值小,则返回(1)选择左边数组进行搜索
(4)如果比待搜索值大,则返回(1)选择右边数组进行搜索
阅读全文
0 0
- javascript实现数据结构中的基本排序方法
- 数据结构中的各种排序方法-JS实现
- javascript实现基本数据结构(一)冒泡排序
- javaScript中的排序方法
- 数据结构:JavaScript实现各种排序
- javascript实现基本排序操作
- C++数据结构中的基本算法排序
- 基本的排序方法实现
- JavaScript实现表格排序方法
- 基本排序算法的JavaScript实现
- 数据结构与算法中的拓扑排序方法
- 数据结构与算法JavaScript - 基本排序算法分析
- c++实现数据结构中的各种排序方法:直接插入、选择,归并、冒泡、快速、堆排序、shell排序
- JavaScript实现数据结构中的队列和堆栈
- 【javascript 数据结构与算法】javascript实现冒泡排序
- 基本数据结构 -- 插入排序
- 基本数据结构 -- 希尔排序
- 数据结构--基本排序算法
- Android中Audio框架
- Go实战--go中函数(function)和方法(method)的使用(The way to go)
- 如何使用jedis对redis数据库操作
- ORACLE DATAGUARD传输原理
- 初学javascript,整理整理笔记(二)
- javascript实现数据结构中的基本排序方法
- hdu2544(Dijkstra算法最短路问题)最短路
- 51单片机---定时器工作方式
- 【Java】Java遍历删除集合中的元素
- Fragment+ViewPager 实现仿微信
- Easyui-datagrid groupview 点击行展开
- wget 命令下载ORACLE官方网JDK的方法
- 【JavaScript】你不知道的 console
- 使用条件变量实现生产者消费者模式