//排序算法

window.onload = function(){
    var array = [0,1,2,44,4,
                324,5,65,6,6,
                34,4,5,6,2,
                43,5,6,62,43,
                5,1,4,51,56,
                76,7,7,2,1,
                45,4,6,7,8];
    //var array = [4,2,5,1,0,3];
    array = sorting.shellSort(array);
    alert(array);
}
 
var sorting = {
    //利用sort方法进行排序
    systemSort: function(arr){
        return arr.sort(function(a,b){
            return a-b;
        });
    },
 
    //冒泡排序
    bubbleSort: function(arr){
        var len=arr.length, tmp;
        for(var i=0;i<len-1;i++){
            for(var j=0;j<len-1-i;j++){
                if(arr[j]>arr[j+1]){
                    tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
        return arr;
    },
 
    //快速排序
    quickSort: function(arr){
        var low=0, high=arr.length-1;
        sort(low,high);
        function sort(low, high){
            if(low<high){
                var mid = (function(low, high){
                    var tmp = arr[low];
                    while(low<high){
                        while(low<high&&arr[high]>=tmp){
                            high--;
                        }
                        arr[low] = arr[high];
                        while(low<high&&arr[low]<=tmp){
                            low++;
                        }
                        arr[high] = arr[low];
                    }
                    arr[low] = tmp;
                    return low;
                })(low, high);
                sort(low, mid-1);
                sort(mid+1,high);
            }
        }
        return arr;
    },
 
    //插入排序
    insertSort: function(arr){
        var len = arr.length;
        for(var i=1;i<len;i++){
            var tmp = arr[i];
            for(var j=i-1;j>=0;j--){
                if(tmp<arr[j]){
                    arr[j+1] = arr[j];
                }else{
                    arr[j+1] = tmp;
                    break;
                }
            }
        }
        return arr;
    },
 
    //希尔排序
    shellSort: function(arr){
        console.log(arr);
        var h = 1;
        while(h<=arr.length/3){
            h = h*3+1;  //O(n^(3/2))by Knuth,1973
        }
        for( ;h>=1;h=Math.floor(h/3)){
            for(var k=0;k<h;k++){
                for(var i=h+k;i<arr.length;i+=h){
                    for(var j=i;j>=h&&arr[j]<arr[j-h];j-=h){
                        var tmp = arr[j];
                        arr[j] = arr[j-h];
                        arr[j-h] = tmp;
                    }
                }
            }
        }
        return arr;
    }
}

js排序的方法的更多相关文章

  1. js按照特定的中文字进行排序的方法

    之前遇到过按照中文字符排序的需求很顺利的解决了,这次是按照特定的中文字进行排序,比如按照保守型,稳健型,平衡型,成长型,进取型进行排序. 可以使用localeCompare() 方法来实现中文按照拼音 ...

  2. JS排序:localeCompare() 方法实现中文排序、sort方法实现数字英文混合排序

    定义:用本地特定的顺序来比较两个字符串. 语法:stringObject.localeCompare(target) 参数:target——要以本地特定的顺序与 stringObject 进行比较的字 ...

  3. 排序图解:js排序算法实现

    之前写过js实现数组去重, 今天继续研究数组: 排序算法实现. 排序是数据结构主要内容,并不限于语言主要在于思想:大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍. ...

  4. JS获取长度方法总结

    目录: 1length 2size() 3length与size()的区别 4获取元素的索引 - index() 5获取对应的索引 - eq() 概述: 在工作中大家经常需要获取对象的长度,或者要获取 ...

  5. JS排序之快速排序

    JS排序之快速排序 一个数组中的数据,选择索引为(2/数组长度)的那个数据作为基数,数组中的其他数据与它对比,比它数值小的放在做数组,比它数值大的放在右数组,最后组合 左数组+基数+右数组,其中,左数 ...

  6. 总结下js排序算法和乱序算法

    其实本人最怕的就是算法,大学算法课就感觉老师在讲天书,而且对于前端来说,算法在实际的应用中实在是很有限.毕竟算法要依靠大量的数据为基础才能发挥出算法的效率,就浏览器那性能,......是吧,退一万步说 ...

  7. JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)

    1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...

  8. TODO:Node.js pm2使用方法

    TODO:Node.js pm2使用方法 pm2 是一个带有负载均衡功能的Node应用的进程管理器. 当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完 ...

  9. 【转载】JS中bind方法与函数柯里化

    原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...

随机推荐

  1. JS a标签默认鼠标事件,导致无法修改input选中状态

    今天踩了一个坑

  2. C语言采用socket实现http post方式上传json数据

    1.按照HTTP协议发送请求: http POST 报文格式 http 报文是面向文本的. 报文分为:请求报文和响应报文 请求报文由:请求行,请求头部,空行和请求数据四个部分组成. <1.请求行 ...

  3. R语言最优化(一维)

    最优化问题是普遍存在的,以前上运筹学课的时候也接触过最优化相关的问题,当时主要是理论课,并且关注的重点是单纯形法.运输问题以及图论等,这里指的最优化是指函数的最优化,即函数的极值,由于寻找一个局部最优 ...

  4. CentOS7基本配置一

    CentOS7基本配置一 安装VMwareTools 1.点击重新安装VM-tool, 继而找到压缩文件VMwareTools-10.2.0...tar.gz,复制到桌面下,解压这么压缩文件到桌面下 ...

  5. 19.Scharr滤波器

    //Scharr void Test_Scharr() { Mat grad_x,grad_y; Mat abs_grad_x,abs_grad_y,dst; g_srcImage=imread(&q ...

  6. selenium中的对文本进行全选,复制,粘贴,剪切和删除的操作

    # 键盘全选操作from selenium.webdriver.common.keys import Keysdriver.find_element_by_css_selector('#key-dem ...

  7. 微信退款回调AES算法(AES-256-ECB)

    解密步骤如下: (1)对加密串A做base64解码,得到加密串B (2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)--> ...

  8. 搭建项目(Vue学习笔记一)

    一.在搭建Vue项目之前首先要搞明白以下几个问题 1.Vue.js是什么 vue.js是一个脚本库. 2.webpack 模块打包机,分析项目结构,找到JavaScript模块以及其他的一些浏览器不能 ...

  9. IP通信基础课堂笔记----第四章(重点中的重点)

    IPv4编址方法 一个IPv4地址可表示为一个32位的二进制数. IP地址前面的网络部分表示一个网段,后面部分(主机位)表示这个网段上的一台设备. 常用IP地址分为四类:A.B.C.D. 每类的网络地 ...

  10. 组合,Mixin,类、类对象、实例对象

    1.组合,将几个横向关系的组合在一起.所谓的组合就是将类的实例化放到新类里面,那么就将旧类组合进去了. class Turtle: def __init__(self, x): # 注意 init 前 ...