javascript-几个基础的排序算法

对这几个基础排序算法进行梳理,便于以后查看。

/**
*
* 冒泡排序
* 从末尾开始相邻两数相互比较大小,满足条件就交换位置。循环每进行一次,即可确定第i位数的值。
*冒泡排序的时间复杂度为O(n^2)。
*
*/
function bubbleSort(arr){
    if(arr == null || arr.length == 0) return;
    for(var i =0 ; i < arr.length-1 ;i++){      //比较n-1次即可
        for(var j = arr.length-1 ; j>i ;j--){
            if(arr[j] < arr[j-1]){

                var temp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = temp;
            }
        }
    }
    console.log(arr);
}

/**
*
*选择排序
*第i次循环,将arr[i]与后面的数比较,用它后面最小的数和它交换。
*选择排序的时间复杂度为O(n^2)
*/
function selectSort(arr){
    if(arr == null || arr.length == 0) return;
    for(var i = 0 ; i < arr.length-1 ;i++){
        var minIndex = i;
        for(var j = i + 1; j < arr.length ; j++){
            if(arr[minIndex] > arr[j]){
                minIndex = j;
            }
        }
        if(minIndex !== i){
            var temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;

        }
    }
    console.log(arr);
}

/**
*
*插入排序
*以第一个数为参照,将第i个数拿出,对第i个数前面的数整理好顺序后,将arr[i]插入适当位置。
*简单插入排序的时间复杂度也是O(n^2)。
*/

function insterSort(arr){
    if(arr == null || arr.length == 0) return;
    for(var i = 1; i < arr.length ; i++){
        var j = i;
        var target = arr[i];  //插入值
        while(j > 0 && target < arr[j-1] ){
              arr[j] = arr[j-1];
                j --;
        }
         arr[j] = target;
    }
    console.log(arr);
}
/*
var a = [15,8,14,2,6];
insterSort(a);
  运行过程
     i = 1   8 15 14 2 6
     i = 2   8 14 15 2 6
     i = 3   target = 2
              数组变化过程:    8 14 15 15 6
                             8 14 14 15 6
                             8 8 14 15 6
                             arr[0] = target 插入
                             2 8 14 15 6

     i = 4 .....
 */

/**
*快速排序
*这是阮一峰的版本,很直观,感觉写得相当棒!
*    (1)在数据集之中,选择一个元素作为"基准"(pivot)。
*
*  (2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右
*     边。
*
*  (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素*     为止。
* 快速排序是不稳定的,其时间平均时间复杂度是O(nlgn)。
*/

var quickSort = function(arr) {

  if (arr.length <= 1) { return arr; }

  var pivotIndex = Math.floor(arr.length / 2);

  var pivot = arr.splice(pivotIndex, 1)[0];

  var left = [];

  var right = [];

  for (var i = 0; i < arr.length; i++){

    if (arr[i] < pivot) {

      left.push(arr[i]);

    } else {

      right.push(arr[i]);

    }

  }
  return quickSort(left).concat([pivot], quickSort(right));

};
时间: 2024-11-05 16:26:49

javascript-几个基础的排序算法的相关文章

JavaScript版几种常见排序算法

今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * 冒泡排序:最简单,也最慢,貌似长度小于7最优* 插入排序: 比冒泡快,比快速排序和希尔排序慢,较小数据有优势* 快速排序:这是一个非常快的排序方式,V8的sort方法就使用快速排序和插入排序的结合* 希尔排序:在非chrome下数组长度小于1000,希尔排序比快速更快* 系统方法:在forfox下系

JavaScript实现的9大排序算法

笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JavaScript实现. 1.插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 2)算法描述和实现 一般来说,插入排序都采

数据结构算法基础-内部排序算法

1 arr = [1,23,12,9,8,8,9,1,1,8,] 2 def quickSortCore(arr,start,end): 3 if start < end: 4 index = partition(arr,start,end) 5 quickSortCore(arr,start,index-1) 6 quickSortCore(arr,index+1,end) 7 8 def partition(arr,start,end): 9 key = arr[start] 10 whil

C#_基础:排序算法

//希尔排序 static int[] ShellSort(int[] array) { if (array != null) { int[] list = { 9, 5, 3, 2, 1 }; foreach (int k in list) { for (int i = k; i < array.Length; i++) { int current = array[i]; int preIndex = i - k; while (preIndex >= 0 && preInd

程序员基础之——排序算法

快速排序 前言 快速排序是在面试中最常见的问题之一,如果有幸问到快排,面试官通常都要求应聘者在纸上手写出快排的代码.本人在最近的一次面试中就被要求手写快排,本来觉得快排的思想早已烂熟于心了,随便写一个出来没什么问题.但是当面前坐着一个面试官,并且要在15分钟内推导出一个无措的快排出来时,对我个人来说,但是还是非常紧张的,最终提交的答案还是存在瑕疵. 由此萌生了通过博客记录面试中基本问题的想法,一是给自己归纳总结,二是希望能够给阅读博客的童鞋也提供一些参考. 本文的目的是想要记录快速排序简洁.优雅

记一下JavaScript的几种排序算法

零.写在最前 排序的方法有很多种,这篇文章只是记录我熟悉的算法: 我发现了一个关于排序算法很有趣的网站,把相关的算法演示做成了动画,有兴趣的同学可以看看! 附上SortAnimate网站链接:http://jun-lu.github.io/SortAnimate/index.html 一.冒泡排序 这是一种最基础的排序算法,也就是入门级别的算法! 原理:两两检测,比较两者之间的大小关系,大的往后丢! 1 function bubbleSort(arr){ 2 for(var i=0;i<arr.

基础排序算法—冒泡,插入,选择

前言 冒泡,插入,选择这三种基础的排序算法,比较简单效率不高,工作中一般不会使用,但是当做算法来研究还是能了解一些知识的,本文以<数据结构与算法之美>为基础,详细解析一下. 正文 首先要引入几个概念 稳定性 如果待排序数组中有相同的元素,排序过后它们的相对顺序不发生变化. 比如 2,9,3,4,8,3 排序过后为2, 3 , 3, 4, 8, 9 这两个3的相对顺序不变.这样就是具有稳定性. 稳定性可以保证复杂数据结构排序时的相对有序性. 比如我们要对一笔订单先按金额排列,金额相同的再按时间排

【C/C++】排序算法小结

1.计数排序 如果给定上下界,并且区间不大的话,最适用. 比如对于英文字母数组进行排序. 时间复杂度O(n),空间复杂度O(n) void countSort(int A[], int n, int low, int high) { int size = high-low+1; vector<int> count(size, 0); //count[i] represents low+i appears count[i] times in A for(int i = 0; i < n;

排序算法 基于Javascript

写在前面 个人感觉:javascript对类似排序查找这样的功能已经有了很好的封装,以致于当我们想对数组排序的时候只需要调用arr.sort()方法,而查找数组元素也只需要调用indexOf()方法或lastIndexOf()方法,我们忽略了其内部的实现.而今,js能开发的项目越来越庞大,对性能和效率要求也越来越高,虽然众多的库和框架也可以帮我们应付这些问题,但小编觉得框架过眼云烟,把握程序开发的基础,才能在飞速的更新换代中应对自如.因此我们不妨也研究一下这些算法,其中的思路有助于我们自身的提高