js三种基础数组排序算法整理

   数组排序,大概是每个程序员必须掌握的基本算法 ,作为一个刚入门的前端小卒,再被各种面试各种排序折磨过后 ,看过很多别人写的 算法 ,但看总归是理解的不是那么深刻 ,便想着自己整理一下这最基本的三个排序算法 ,希望对还在学习的你有些许帮助 。比较基本的三种算法 。冒泡、插入 、快速 。

   首先来看冒泡排序法 ,基本原理其实就是对数组进行两层循环,外层循环控制次数,数组中有多少个成员,便是要进行多少次内层遍历,不断地将当前成员和下一成员进行对比 ,其实在群众偶其中有很多次是重复对比的 ,先看这样一个写法 :


Array.prototype.bubbleSort=function (){ for(var i=0;i<this.length;i++){   for(var j=0;j<this.length-1;j++){   if(this[j]>this[j+1]){
var temp=this[j];
       this[j]=this[j+1];
       this[j+1]=temp;
    }
  }
 }     return this;
}  

这个无疑是最最基本 的写法了 ,但实际上这个还可以稍做一下优化 ,节省其时间复杂度 ,看代码如下 :

Array.prototype.bubbleSort=function (){ for(var i=0;i<this.length;i++){   for(var j=0;j<this.length-i-1;j++){   if(this[j]>this[j+1]){
       var temp=this[j];
       this[j]=this[j+1];
       this[j+1]=temp;
    }
  }
 }
 return this;
}  

再者 来看插入排序 ,顾名思义 ,是将数组每一个成员 ,一一插入到正确的位置,假设第一个成员【0】已经完成排序 ,然后从【1】开始遍历数组 ,每外层遍历一次 内层循环便跟之前已排序好的每个成员进行比较 ,若arr【j-1】>arr【j】,则交换位置,以此类推,直到退出循环,将其插入到正确的位置;代码如下 :

Array.prototype.insertSort=function (){
    var prevIndex,current;
     for(var i=1;i<this.length;i++)  {
        prevIndex=i-1;
        current=this[i];
        while(prevIndex>=0&&this[prevIndex]>current){
               this[prevIndex+1]=this[prevIndex];
               prevIndex--;
         }
       this[prevIndex+1]=current;
     }
    return this;
}
var arr=[12,3,23,45,32];
arr.insertSort();

最后我们来看一下比较有实用价值的快速排序法 ;快速排序法原理是将数组不断地进行分治,声明两个数组 left和right,然后选择数组中间一个成员作为 基准base ,将比其大的push进right数组 ,比其小的push进左边数组 ,接着递归接着对left和right数组进行继续分组排序 ,每分一次组便对left、base、right进行concat,以此类推 ,直到排序完成,代码如下:

Array.prototype.quickSort=function(){
    if(this.length<=1){return this};
    var baseIndex=Math.floor(this.length/2);
    var base=this.splice(baseIndex,1)[0];
    var left=[],right=[];
    for(var i=0;i<this.length;i++){
        if(this[i]<base){
            left.push(this[i]);
        }else{
            right.push(this[i]);
        }
    }
    return  left.quickSort().concat([base],right.quickSort());
}
var a=[12,2,34,32,16];
a.quickSort();
时间: 2024-12-15 01:57:29

js三种基础数组排序算法整理的相关文章

三种基础排序算法总结

一.冒泡排序 1.算法思想: 1).两层循环,外层循环i从0开始,内层循环从j=i+1开始2).如果ary[i] < ary[j],则交换其值3).直到外层循环到length-1 2.主算法实现 public static void bubbleSort(int[] ary){ int length = ary.length; //每完成一轮外层循环,ary[i]的次序在全局确定 for (int i = 0; i < length; i++) { //内层循环向后扫描,且立即交换. for

算法复杂度,及三种主要排序算法的研究

一.时间复杂度 1.时间频度  T(n),n为问题的规模 即--算法中语句的执行次数.又叫语句频度. 2.时间复杂度 记作 O( f(n) ),这里的f(n)是一个T(n)的同数量级函数. 如O(1)表示算法的语句执行次数为一个常数,不随规模n的增长而增长: 又如T(n)=n^2+3n+4与T(n)=4n^2+2n+1它们的频度不同, 但时间复杂度相同,都为O(n^2). 3.算法的性能 主要用算法的 时间复杂度 的数量级来评价一个算法的时间性能. 二.空间复杂度 S(n),包括3方面: 1.算

3-JavaScript的三种基础弹框

JavaScript中三种基础弹框: 一.基础弹框 语法:alert() 举例: alert("123"); 二.确认框 语法:confirm(); 举例:var b = confirm("aa"); alert(b); 三.警告框 语法:prompt(text,value) 举例:var a = prompt("请输入你的用户名","boss"); alert(a);

php四种基础排序算法的运行时间比较!

/** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 function bubbleSort($array){ $temp = 0; for($i = 0;$i < count($array) -1;$i++){ for($j = 0;$j < count($array) - 1 -$i;$j++){ if($array[$j] > $arra

php四种基础排序算法的运行时间比较

/** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 function bubbleSort($array){ $temp = 0; for($i = 0;$i < count($array) -1;$i++){ for($j = 0;$j < count($array) - 1 -$i;$j++){ if($array[$j] > $arra

算法:三种简单排序算法

排序算法比较常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和快速排序算法等.今天先学习一下前面三种比较简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等,排序过后仍然是原来的顺序则为稳定排序. ②内部排序:排序过程都在内存中进行:外部排序:需要对外存进行访问的排序过程. ③内排序算法性能因素:1.时间性能,比较与移动:2.辅助空间:3.算法复杂性 实例:冒泡排序.简单选择排序与直接插入排序 #include "stdio.h" #define

模拟操作系统中进程的三种基础状态与内存的分配和回收(最佳适配算法)

利用键盘模拟进程的三种操作状态,并且使用C++中的list模板模拟内存的分配和回收. 能够模拟进程的创建与撤销过程 l可对进程的状态进行全面的控制 按先进先出方式管理就绪和阻塞队列,能够按队列形式输出进程状 用PCB代表进程,用全局变量表示进程的个数. 1 #include <iostream> 2 #include <list> 3 #include <numeric> 4 #include <algorithm> 5 #include<stdlib

Jvm(25),回收策略----前三种基本回收算法对比

这里LZ给各位总结一下三个算法的共同点以及它们各自的优势劣势,让各位对比一下,想必会更加清晰. 它们的共同点主要有以下两点. 三个算法都基于根搜索算法去判断一个对象是否应该被回收,而支撑根搜索算法可以正常工作的理论依据,就是语法中变量作用域的相关内容.因此,要想防止内存泄露,最 根本的办法就是掌握好变量作用域,而不应该使用前面内存管理杂谈一章中所提到的 C/C++式内存管理方式. 在GC线程开启时,或者说GC过程开始时,它们都要暂停应用程序(stop the world). 它们的区别LZ按照下

三种不同查找算法实际查找性能的对比

   一.查找问题的介绍 查找问题就是在给定的集合(或者是多重集,它允许多个元素具有相同的值)中找寻一个给定的值,我们称之为查找键.有许多查找算法可供选择,其中既包括直截了当的顺序搜索,也包括效率极高但应用受限的折半查找,还有那些将原集合用另一种形式表示以方便查找的算法.最后一类算法对于现实应用具有特别重要的价值,因为它们对于大型数据库的信息存取来说是不可或缺的. 对于查找来说,没有一种算法在任何情况下都是最优的.有些算法速度比其他算法快,但需要较多的存储空间:有些算法速度非常快,但仅适用于有序