zoukankan      html  css  js  c++  java
  • JavaScript-实现排序算法

    1.简单选择排序

    基本思想:先选第一个数,分别与后面n-1个数比较,保留数组中最小值在位置上,大值则交换;再选第二个数,分别与后面n-2个数比较,如此循环
    时间复杂度:O(n^2)
    。。。
    function selectSort(arr){
                var temp;
                for(var i = 0; i < arr.length - 1; i++){
                    for(var j = i + 1; j < arr.length; j++){
                        if(arr[i] > arr[j]){
                            temp = arr[j];
                            arr[j] = arr[i];
                            arr[i] = temp;
                        }
                    }
                }
                return arr;
    }
    2.冒泡排序(默认小数上冒 )
    基本思想:(小数往上冒)最后一个数不断与前一个数比较,若较小就往上冒,循环一次会把最小数带到最高处
    时间复杂度:O(n^2)
    function bubbleSort (arr) {
                for(var i = 0; i < arr.length; i++){
                    for(var j = arr.length; j > i; j--){
                        if(arr[j] < arr[j - 1]){
                            [arr[j], arr[j - 1]] = [arr[j -1], arr[j]];
                        }
                    }
                }
                return arr;
    }
     改进冒泡排序
    基本思想:记录最后一个交换的地方,不交换的地方说明已经排好序了,所以下一次排序只需要排[pos,arr.length-1]这一段,而非[i,arr.length-1]
    function bubbleSort_(arr){
                var pos = 0;
                while(pos != arr.length - 2){
                    var count = pos;
                    for(var j = arr.length - 1; j > count; j--){
                        if(arr[j] < arr[j - 1]){
                            [arr[j], arr[j - 1]] = [arr[j - 1], arr[j]];
                            pos = j
                        }
                    }
                }
                return arr;
            }
    3.插入排序
    基本思想:从第二个数开始,不断插入到前面的有序数组中去(代码实现时,不断把大数往后移,基数找到位置后插入)
    function insertion (arr) {
                for(var i = 1; i < arr.length; i++){
                    var num = arr[i];
                    var j = i;
                    while(num < arr[j - 1] && j >= 1){
                        arr[j] = arr[j - 1];
                        j--;
                    }
                    arr[j] = num;
                }
                return arr;
    }
    4.快速排序
    基本思想:以第一个数为基数,小数放左边,大数放右边,左右数组递归
            function quick (arr) {
                if(arr.length <= 1){
                    return arr;
                }else{
                    var left = [];
                    var right = [];
                    var num = arr[0];
                    for(var i = 1; i < arr.length; i++){
                        if(num > arr[i]){
                            left.push(arr[i]);
                        }else {
                            right.push(arr[i]);
                        }
                    }
                    return quick(left).concat(num, quick(right));
                }
            }
  • 相关阅读:
    Android 如何处理崩溃的异常
    体验下Xcode5与ios7
    IOS 改变导航栏返回按钮的标题
    android之HttpURLConnection
    android异步加载图片
    android 从服务器上获取APK下载安装
    android AsyncTask异步下载并更新进度条
    android 四种堆状态
    Windows Azure 的开源 DNA
    mysql 只给更新表的某个字段的授权
  • 原文地址:https://www.cnblogs.com/hjqbit/p/7247804.html
Copyright © 2011-2022 走看看