JavaScript实现排序算法

// 寄生构造方式实现继承
  var MyArray=function(){
    var arr=new Array();
    // 添加值
    arr.push.apply(arr,arguments);//和下面的循环一个效果
    // for (var i = 0; i < arguments.length; i++) {
    //   arr.push(arguments[i]);
    // }

  // ===========================插入排序=====================================
    arr.insertSort=function(){
     var position,
         current;//当前待排序的元素
      for (var i = 1; i < arr.length; i++) {

           if (arr[i]<arr[i-1]) {
              position=i;
              current=arr[i];
              do{
                arr[position]=arr[position-1];//移动数据
                position--;//空位置,用来移动数据的
              }while(position>0 && arr[position-1]>current)
              arr[position]=current;
           }else{ //当前待排序的值>=上一个已排序的值
             // 不用移动,直接进入下一个循环
           }
      }
    };

  // =======================希尔排序==============================
  // 是基于插入排序的变种(以下说的排序都是插入排序)
  // 对待排序的数组进行多次分组排序,最后在对这个数组进行整体合并排序
  //
  // 那么有两个问题:
  // 1、怎么分组
  // 这里的分组并不是真的新创建新的数组容器来将整个数组进行分组,在原数组上用一些标记来进行划分
  // 例如数组:[1,2,33,5,67,0,6]
  // 我们取下标增量imcrement=3,2,1 分别对这个数组进行3次划分,并且对这3次划分的各个数组进行一次插入排序
  // 增量为3:[1,5,6] [2,67] [33,0] ——排序——>[1,5,6] [2,67] [0,33]——新数组——>[1,2,0,5,67,33,6]
  // 增量为2:[1,0,67,6] [2,5,33]  ——排序——> [1,0,6,67] [2,5,33] ——新数组——> [1,2,0,5,6,33,67]
  // 增量为1:[1,2,0,5,6,33,67]   ——排序——> [0,1,2,5,6,33,67]
  //
  // 注:每次划分都是在排序后的新循序进行划分
  // 这里的排序方法和之前的插入排序稍有区别,排序的时候"移位"使用的是swap方式的数值交换,因为不能影响到其它的分组。
  // 2、怎么合并
  // 这里分组并没有把数组分割,当使用增量为1的时候就是对整个数组进行合并排序

  arr.shellSort=function(){
    var increment=arr.length;
    do{
      increment= parseInt(increment/3)+1;//这里的取整很重要
      for (var i = 0; i <increment; i++) {
          _inerSort(i,increment);
      }
      if (increment==1) {break;}
    }while(increment>1)
  };
  function _inerSort(start,gap){
    var tmp;
    for (var i = start+gap; i < arr.length; i+=gap) {
       if (arr[i]<arr[i-gap]) {
          tmp=arr[i];
          arr[i]=arr[i-gap];
          arr[i-gap]=tmp;
       }
    }
  }

  // ================start of 选择排序========================
   function _swapFun(low,high){
      var tmp=arr[low];
      arr[low]=arr[high];
      arr[high]=tmp;
   }
   function _findMax_index(low,high){
    var  max_index=low;//if low==high max_index=low
    for (var i = low+1; i < high+1; i++) {
        if (arr[max_index]<arr[i]) {
          max_index=i;
        }
    }
    return max_index;
   }
   arr.selectSort=function(){
         var max_key;
         for (var i = arr.length-1; i >0 ; i--) {
            max_key=_findMax_index(0,i);
            _swapFun(max_key,i);
         }
   };
  // ======================end of 选择排序================================
  //
  // 快速排序
  function _partion(low,top){
      var povit=arr[low];
    for (var i = low+1 ; i <top+1; i++) {
         if (arr[i]<povit) {
            var tmp=arr[i];
             arr.splice(i,1);//这里直接用Array类型的splice方法删除
             arr.splice(low,0,tmp)//插入povit的左侧
         }
    }
    var mid=arr.indexOf(povit);
   return mid;
  }
  arr.quickSort=function(low,top){
   if (low>=top) {console.log("low:"+low+"top:"+top+"\n");return;}
   var p=_partion(low,top);
     arguments.callee(low,p);
     arguments.callee(p+1,top);
  };

    return arr;
  };
时间: 2024-12-18 23:26:13

JavaScript实现排序算法的相关文章

【JavaScript】【算法】JavaScript版排序算法

JavaScript版排序算法:冒泡排序.快速排序.插入排序.希尔排序(小数据时,希尔排序会比快排快哦) 1 //排序算法 2 window.onload = function(){ 3 var array = [0,1,2,44,4, 4 324,5,65,6,6, 5 34,4,5,6,2, 6 43,5,6,62,43, 7 5,1,4,51,56, 8 76,7,7,2,1, 9 45,4,6,7,8]; 10 //var array = [4,2,5,1,0,3]; 11 array

javascript常用排序算法实现

毕业后,由于工作中很少需要自已去写一些排序,所以那些排序算法都忘得差不多了,不过排序是最基础的算法,还是不能落下啦,于是找了一些资料,然后用Javascript实现了一些常用的算法,具体代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>

Javascript之排序算法

常用排序方法 算法简介 算法描述 算法实现 算法分析 插入算法 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需要用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 1.从第一个元素开始,该元素可以认为已经被排序: 2.取出下一个元素,在已经排序的元素序列中从后向前扫描: 3.如果该元素(已排序)大于新元素,将该元素移到下一个位置: 4.重复步

JavaScript常见排序算法

1.冒泡排序 function bubble_sort(arr) { if (arr.length <= 1) { return arr; } var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - 1; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = t

JavaScript中常用的4种排序算法

冒泡排序 冒泡排序是我们在编程算法中,算是比较常用的排序算法之一,在学习阶段,也是最需要接触理解的算法,所以我们放在第一个来学习. 算法介绍:比较相邻的两个元素,如果前一个比后一个大,则交换位置.第一轮把最大的元素放到了最后面.由于每次排序最后一个都是最大的,所以之后按照步骤1排序最后一个元素不用比较. 冒泡算法改进:设置一个标志,如果这一趟发生了交换,则为true.否则为false.如果这一趟没有发生交换,则说明排序已经完成.代码如下: 假如数组长度是20,如果只有前十位是无序排列的,后十位是

javascript数据结构与算法--基本排序算法分析

javascript中的基本排序算法 对计算机中存储的数据执行的两种最常见操作是排序和检索,排序和检索算法对于前端开发尤其重要,对此我会对这两种算法做深入的研究,而不会和书上一样只是会贴代码而已,下面我会一步步从自己的理解的思路来一步步学习各个排序的思想.不过这些算法依赖于javascript中的数组来存储数据.最后我会来测试下基本算法(冒泡排序,选择排序,插入排序)的那个效率更高! 下面啊,我们先可以来封装常规数组操作的函数,比如:插入新数据,显示数组数据,还有交换数组元素等操作来调用不同的排

JavaScript实现常用的排序算法

▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排序.希尔排序.直接选择排序 ▓▓▓▓▓▓ 交换排序 交换排序是一类在排序过程中借助于交换操作来完成排序的方法,基本思想是两两比较排序记录的关键字,如果发现两个关键字逆序,则将两个记录位置互换,重复此过程,直到该排序列中所有关键字都有序为止,接下来介绍交换排序中常见的冒泡排序和快速排序 ▓▓▓▓▓▓

排序算法 基于Javascript

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

转载部长一篇大作:常用排序算法之JavaScript实现

注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang1724/p/3946339.html#3037096.O(∩_∩)O~  知识产权归部长原文所有. 笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JavaScript实现. 1.插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫