JS实现排序
排序算法可以分为内部排序和外部排序。内部排序是数据记录在内存中进行排序,外部排序是因排序的数据很大,一次不能够容纳全部的排序记录,在排序中需要访问外存。常见的内部排序算法有插入排序,选择排序,冒泡排序,归并排序,快速排序,堆排序。
算法一:插入排序
算法步骤:
1.将第一待排序序列第一个元素看做一个有序数列,把第二个元素到最后一个元素当做未排序序列。
2.从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列适当位置中(如果待插入的元素与有序数列中的某个元素相等,则待插入元素插入到相等元素的后面)
例如:19 2 8 11 24 6
2 19
2 8 19
2 8 11 19
2 8 11 19 24
2 6 8 11 19 24
代码实现:
var arr=[77,56,3,8,4];
function compare(arr){
var newArr=[];
newArr.push(arr[0]);//77
for(var i=1;i<arr.length;i++){
newArr.push(arr[i]);//56---77 56
for(var j=newArr.length-2;j>=0;j--){
if(newArr[j+1]<newArr[j]){
var temp = newArr[j];
newArr[j] = newArr[j+1];
newArr[j+1] = temp;//56 77
}
}
}
console.log(newArr);
}
compare(arr);
算法二:冒泡排序
算法步骤:
1.比较相邻的元素,如果第一个比第二个大,就交换他们两个
2.对每一对相邻的元素作同样的工作,从开始第一对到结尾的最后一对,这步做完后,最后的元素会是最大的数
3.针对所有的元素重复以上步骤,除了最后一个
4.持续对每次越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
代码示例:
var a=[38,9,2,14,6];
for(var i=0;i<a.length;i++){
for(var j=0;j<a.length-1;j++){
if(a[j+1]>a[j]){
a[j]=a[j]+a[j+1];
a[j+1]=a[j]-a[j+1];
a[j]=a[j]-a[j+1];
}
}
console.log(a[i]);
}
算法三:快速排序
算法步骤:
1.从数列中挑出一个元素,称为基准
2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有愿所有比基准值大的摆在基准的后面(相同的数可以到任意一边),在这个分区退出之后,该基准就处于数列的中间位置,这个称之为分区操作。
3.递归的把所有小于基准值元素的子数列和大于基准值元素的子数列排序
递归的最底部情形是数列的大小是0或1,也就是永远都已经被排序好了,虽然一直递归下去,但这个方法总会退出,因为在每次的迭代中,它至少把一个元素摆到它最后的位置去。
代码示例:
function qSort(a,left,right){
var mid = a[left];
while(left<right){
while(a[right]>mid&&left<right)right--;
if(left<right)
a[left++]=a[right];
while(a[left]<mid&&left<right) left++;
if(left<right)
a[right--]=a[left];
}
a[left] = mid;
return left;
}
function quickSort(a,left,right){
if(left<right){
var mid = qSort(a,left,right);
quickSort(a,left,mid-1);
quickSort(a,mid+1,right);
}
}
var a=[25,79,44,11,36,42,8];
quickSort(a,0, a.length-1);
for(var i=0; i< a.length;i++){
console.log(a[i]);
}
算法四:堆排序
算法步骤:
1.创建一个堆
2.把堆首和堆尾互换
3.把堆的尺寸缩小1,并调用shift-down(0),目的是把新的数组顶端数据调整到相应的位置
4.重复步骤2,直到堆的尺寸为1
代码示例:
function headAdjust(elements, pos, len){
var swap = elements[pos];
var child = pos * 2 + 1;
while(child < len){
if(child + 1 < len && elements[child] < elements[child + 1]){
child += 1;
}
if(elements[pos] < elements[child]){
elements[pos] = elements[child];
pos = child;
child = pos * 2 + 1;
}
else{
break;
}
elements[pos] = swap;
}
}
function buildHeap(elements){
for(var i=elements.length/2; i>=0; i--){
headAdjust(elements, i, elements.length);
}
}
function sort(elements){
buildHeap(elements);
for(var i=elements.length-1; i>0; i--){
var swap = elements[i];
elements[i] = elements[0];
elements[0] = swap;
headAdjust(elements, 0, i);
}
}
var elements = [33, 17, 25, 77, 42, 24, 59, 16, 1, 38];
sort(elements);
console.log(elements);
算法五:归并排序
算法步骤:
1.申请空间,使其大小为两个排序序列之和,该空间用来存放合并后的数列
2.设定两个指针,最初位置分别是两个已经排序序列的起始位置
3.比较两个指针所指向的元素,选择相对小的元素放到合并空间,并移动指针到下一位置
4.重复步骤3直到某一指针达到序列尾
5.将另一序列剩下的所有元素直接复制到合并序列尾
代码示例:
function mergeSort(arr){
if(arr.length<2){
return arr;
}
var middle = Math.floor(arr.length/2);
var left = arr.slice(0,middle);
var right = arr.slice(middle,arr.length);
return merge(mergeSort(left),mergeSort(right));
}
function merge(left,right){
var newArr = [];
while(left.length&&right.length){
if(left[0] <= right[0]){
newArr.push(left.shift());
}else{
newArr.push(right.shift());
}
}
while(left.length){
newArr.push(left.shift());
}
while(right.length){
newArr.push(right.shift());
}
return newArr;
}
var arr = [14,88,41,6,45,21];
console.log(mergeSort(arr));
算法六:选择排序
算法步骤:
1.首先在未排序序列中找到最大或最小元素,存放到序列起始位置
2.再从剩余序列中找到最大或最小元素放到已排序序列末尾
3.重复第二步,直到所有元素都排序完毕
代码示例:
function choseSort(a){
for(var j=0;j< a.length-1;j++){
var index = j;
for(var i=j;i< a.length;i++){
if(a[i]<a[index]){
index = i;
}
}
var temp = a[j];
a[j] = a[index];
a[index] = temp;
}
return a[j];
}
var a = [15,2,41,30,9,14];
choseSort(a);
for(var i=0;i< a.length;i++){
console.log(a[i]);
}
JS实现排序的更多相关文章
- 转:js,jQuery 排序的实现,网页标签排序的实现,标签排序
js,jQuery 排序的实现: 重点: 想要实现排序,最简单的方法就是 先把标签用jQuery读进对象数组 用js排序好对象数组 (针对对象数组进行排序, 不要试图直接对网页的内容进行直接更改) 用 ...
- js拼音排序
js拼音排序 var arr =['a','c','b','b']; arr.sort( function compareFunction(p1, p2) { return p1.localeComp ...
- Table Dragger - 简单的 JS 拖放排序表格插件
Table Dragger 是一个极简的实现拖放排序的表格插件,纯 JavaScript 库,不依赖 jQuery.用于构建操作方便的拖放排序功能,超级容易设置,有平滑的动画,支持触摸事件. 在线演示 ...
- [js] - 关于js的排序sort
js的排序sort并不能一次排序好 function solution(nums){ return nums.sort(sortNumber); } function sortNumber(a, b) ...
- JS优先队列排序。出队时,先找出优先级最高的元素,再按照先进先出出队。
JS优先队列排序.出队时,先找出优先级最高的元素,再按照先进先出出队. /* * 优先队列 * 出队时,先找出优先级最高的元素,再按照先进先出出队. * */ function Queue(){ th ...
- Js中文排序(拼音首字母)
演示地址:http://lar5.sinaapp.com/ 1.index.html <html xmlns="http://www.w3.org/1999/xhtml"&g ...
- js自定义排序
摘要 有个js对象数组 var ary=[{id:1,name:"b"},{id:2,name:"b"}] 需求是根据name 或者 id的值来排序,这里有个风 ...
- js简单排序
简单的排序功能 HTML代码: <body> <input id="btn1" type="button" value="排序&qu ...
- C#,js数据排序及其操作
List<int> listint=new List<int>{2,1,7,3,8,5,4,6};listint.Sort((x, y) => x - y); var a ...
- JS 随机排序算法
https://www.cnblogs.com/getdaydayup/p/6592154.html 使用JS编写一个方法 让数组中的元素每次刷新随机排列 法一: var arr =[1,2,3,4] ...
随机推荐
- netflix zuul 学习
netflix zuul 是netflix开发的一个EDGE SERVICE. 主要是作为一个API Gateway 服务器,可以实现安全,流量控制等功能. 我看的是1.x的版本,Zuul1.x的实现 ...
- vue单文件组件的构建
在很多Vue项目中,我们使用 Vue.component 来定义全局组件,这种方式在很多中小规模的项目中运作的很好. 但当在更复杂的项目中,就有了很大的弊端. 我们就可以用文件扩展名 .vue的单文件 ...
- Jmeter函数引用和函数重定向
在jmeter中的[选项]中选择[函数助手对话框]---这些函数可以高速有效的帮助我们开展自动化编写与校验!!!!!! 如图: 重点!!!本章的侧重点不讲函数的具体使用,函数具体的使用与java类似, ...
- LINQ笔记
LINQ概述 语言集成查询(Language intergrated Query,LINQ)在C#编程语言中集成了查询语法. 可以使用相同的语法访问不同的数据源 提供了不同数据源的抽象层,所有可以使用 ...
- .Net轻量级ORM-NPoco的使用方法-摘自NPoco国外官方Wiki
文章引用自NPoco官方Wiki,地址:https://github.com/schotime/NPoco/wiki,因公司网络不稳定,有时无法访问,特将其摘抄. Home Adam Schroder ...
- HDFS入门(1)
2015.07.12笔记 1.HDFS Distributed File System(操作系统实现人机交互,最重要的功能是文件管理,使用文件管理系统,windows.Linux文件管理系统有共性:用 ...
- ASP.NET MVC制作404跳转(非302和200)
前言:距离上次发文已经有几个月了! 这段时间李,制作了一个博客网站,现将博客文章选一些发表到博客园,顺便为自己网站打一下广告! 产生404的原因主要有以下: 1.浏览器和爬虫:某些浏览器会请求网站的f ...
- dotweb——go语言的一个微型web框架(一)
dotweb是16年正式托管到github的一个开源项目,go语言的web框架目前也有很多,出名的有bee和echo.它们都是很优秀的框架,但是我们喜欢更轻.更小的东西,经历一些之后我们更青睐微服务这 ...
- 日历组件的使用,bootstrap-datetimepicker
官方文档:http://www.bootcss.com/p/bootstrap-datetimepicker/ .html <input name="createdTimeEnd&qu ...
- 车大棒浅谈jQuery源码(二)
前言 本来只是一个自己学习jQuery笔记的简单分享,没想到获得这么多人赏识.我自己也是傻呵呵的一脸迷茫,感觉到受宠若惊. 不过还是有人向批判我的文章说,这是基本知识点,完全跟jQuery源码沾不上边 ...