js排序的方法

//排序算法

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;

    }

}

时间: 2024-10-31 12:49:48

js排序的方法的相关文章

JS获取长度方法总结

length: length是JS原生的方法,用于获取元素的个数或者对象的长度,从1开始 //用于获取对象的长度,从1开始var length = $("#uw3c").length; size(): size()是jQuery中的方法,用来获取元素个数,从1开始. //用于获取对象的长度,从1开始var length = $("#uw3c").size(); length与size()的区别: 如果要是获取字符串长度的话,那么用那个都一样.如果要是获取元素个数,那

JS 数组及其方法浅析

近来闲来无事,小码哥突发奇想,手一哆嗦,就把javascript中的数组及其方法小小总结了一下! 在JS里我们很抽象的理解万物皆对象,这大概也是,我们现在在写Js代码的时候,都善于用面向对象的方式写程序的根由吧....不多说,数组Array也是对象无疑了! 首先,我们肯定应该知道什么是数组?其又是如何定义的?都有哪些优点?这都是我们关心的,,, 数组定义:数组说白了就是数据的集合,在内存中,是一块连续内存的地址:JS中数组分为一维数组和多维数组. 定义方式: 1.直接量定义:var Arr=[e

JS排序之快速排序

JS排序之快速排序 一个数组中的数据,选择索引为(2/数组长度)的那个数据作为基数,数组中的其他数据与它对比,比它数值小的放在做数组,比它数值大的放在右数组,最后组合 左数组+基数+右数组,其中,左数组和右数组再调该方法,也就是递归调用,当数组长度小于2时,停止. <script> var arr=[12,56,15,65,55,90,21,9]; function fastSort(arr){ if(arr.length<2){ return arr; } var left=[]; v

js排序算法

利用js来实现一些常见的排序算法,在面试中问得还是挺多的,下面我就其进行了简单的总结. sort()方法 首先要讲讲JS数组排序的sort方法,它实现的原理是通过两两比较的方法,sort()方法按升序排列数组项,即最小的值位于最前面,最大的值位于最后面,为了实现排序,sort()方法会调用每个数组项的toString()方法,然后比较得到的字符串,即使数组中的每一项都是数值,sort方法比较的也是字符串.因此有必要定义一个比较函数: function compare(value1,value2)

JQuery 加载 CSS、JS 文件的方法有哪些?

在进行web前端开发(http://www.maiziedu.com/course/web-px/)时,我们可能会需要使用JQuery加载一个外部的css文件或者js文件,加载外部文件的方法有多种,下面具体看看各种加载方法 JS 方式加载 CSS.JS 文件: //加载 css 文件function includeCss(filename) { var head = document.getElementsByTagName('head')[0]; var link = document.cre

js 变量提升+方法提升

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> var a = 100; function t() { alert(a); var a = 10; } t(); //输出结果为undefine

【js常用DOM方法】

介绍几个js DOM的常用方法 获取元素节点 getElementById  getElementsByTagName  getElementsByClassName 先写一个简单的网页做测试: /* test.html*/<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>test</title> </head> <body&g

C#的WEBBROWSER与JS交互的方法(转载)

原地址:http://www.jb51.net/article/57574.htm 本文实例总结了C#的WEBBROWSER与JS交互的方法.分享给大家供大家参考.具体实现方法如下: 一.实现WebBrowser内部跳转,阻止默认打开IE 1.引用封装好的WebBrowserLinkSelf.dll实现 复制代码代码如下: public partial class MainWindow : Window{       private WebBrowser webBrowser = new Web

js中call方法的使用介绍

js call call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参数 thisObj 可选项.将被用作当前对象的对象. arg1, arg2, , argN 可选项.将被传递方法参数序列. 说明 call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对