zoukankan      html  css  js  c++  java
  • 排序算法!

      JavaScript实现数组快速排序,主要思想是找到一个中间值,递归比较,创建两个数组,左数组和右数组,如果比中间值小的放在左边数组中,比中间值大的放在右边数组中,最后将数组和中值合并,得到新的数组;

      快速排序是处理大数据集最快的排序算法之一。它是一种分而治之的算法,通过递归的方式将数据依次分解为包含较小元素和较大元素的不同子序列。该算法不断重复这个步骤直到所有数据都是有序的。

    function quicksort(arr){
        if(arr.length<=1){  //如果长度小于1 直接返回
            return arr;
        }
        // 取中值
        // 先得到中值的序号
        var num = Math.floor(arr.length/2);
        //得到中间值
        var numval = arr.splice(num,1);
        // 建立左右数组
        var left = [];
        var right = [];
        // 循环,比中值小的放左边,比中值大的放右边
        for (var i = 0,j = arr.length; i < j; i++) {
            if(arr[i]<numval){
                left.push(arr[i])
            }else{
                right.push(arr[i])
            }        
        }
        //递归
        return quicksort(left).concat([numval],quicksort(right));
    }
    var arr1 = [1,2,3,4,55,1,34,43,568,76,23,546,451,21]
    console.log(quicksort(arr1).toString());

      冒泡排序:是最慢的排序,但是是最容易的排序方法;

    假设正在将一组数字按照升序排列,较大的值会浮动到数组的右侧,而较小的值则会浮动到数组的左侧。之所以会产生这种现象是因为算法会多次在数组中移动,比较相邻的数据,当左侧值大于右侧值时将它们进行互换。

    function bubblesort(){
        var numElements = this.dataStore.length;
        var temp;
        for ( var outer = numElements; outer >= 2; --outer) {
            for ( var inner = 0; inner <= outer - 1; ++inner ) {
                if (this.dataStore[inner] > this.dataStore[inner + 1]) {
                    swap(this.dataStore, inner, inner + 1);
                }
            }
        }
    }                                

      插入排序是基本排序算法中用时最短,效率最高的

  • 相关阅读:
    POJ 2240 Arbitrage spfa 判正环
    POJ 3259 Wormholes spfa 判负环
    POJ1680 Currency Exchange SPFA判正环
    HDU5649 DZY Loves Sorting 线段树
    HDU 5648 DZY Loves Math 暴力打表
    HDU5647 DZY Loves Connecting 树形DP
    CDOJ 1071 秋实大哥下棋 线段树
    HDU5046 Airport dancing links 重复覆盖+二分
    HDU 3335 Divisibility dancing links 重复覆盖
    FZU1686 神龙的难题 dancing links 重复覆盖
  • 原文地址:https://www.cnblogs.com/qqfontofweb/p/6827806.html
Copyright © 2011-2022 走看看