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

     冒泡排序(Bubble Sort)

    冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

    1.1 算法描述

    • 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
    • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
    • 针对所有的元素重复以上的步骤,除了最后一个;
    • 重复步骤1~3,直到排序完成。

       

    function bubbleSort(arr) {
        var len = arr.length;
        for (var i = 0; i < len - 1; i++) {
            for (var j = 0; j < len - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) { // 相邻元素两两对比
                    var temp = arr[j + 1]; // 元素交换
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }
    function bubbleSort(array) {
        for (let i = array.length; i > 0; i--) {
            for (let j = 0; j < i; j++) {
                if (array[j] > array[j + 1]) {
                    var temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
        return array;
    }
    console.log(bubbleSort([10, 8, 3, 2, 2, 4, 9, 5, 4, 3]));

     由于每次循环完最后一个元素已经是最大的了,所以最后一个元素不用比较,所以上面的代码可以优化一下。

    function bubbleSort(arr) {
        for (var i = 0; i < arr.length - 1; i++) {
            for (var j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    var z = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = z;
                }
            }
        }
        return arr;
    }
    console.log(bubbleSort([10, 8, 3, 2, 2, 4, 9, 5, 4, 3]));

     选择排序(Selection Sort)

    选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

    2.1 算法描述

    n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:

    • 初始状态:无序区为R[1..n],有序区为空;
    • 第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;
    • n-1趟结束,数组有序化了。

    2.2 动图演示

    function selectionSort(arr) {
    
        var len = arr.length;
    
        var minIndex, temp;
    
        for (var i = 0; i < len - 1; i++) {
    
            minIndex = i;
    
            for (var j = i + 1; j < len; j++) {
    
                if (arr[j] < arr[minIndex]) {    // 寻找最小的数
    
                    minIndex = j;                // 将最小数的索引保存
    
                }
    
            }
    
            temp = arr[i];
    
            arr[i] = arr[minIndex];
    
            arr[minIndex] = temp;
    
        }
    
        return arr;
    
    } 

    表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。

    插入排序(Insertion Sort)

    插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

    3.1 算法描述

    一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

    • 从第一个元素开始,该元素可以认为已经被排序;
    • 取出下一个元素,在已经排序的元素序列中从后向前扫描;
    • 如果该元素(已排序)大于新元素,将该元素移到下一位置;
    • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
    • 将新元素插入到该位置后;
    • 重复步骤2~5。

    function insertionSort(arr) {
    
        var len = arr.length;
    
        var preIndex, current;
    
        for (var i = 1; i < len; i++) {
    
            preIndex = i - 1;
    
            current = arr[i];
    
            while (preIndex >= 0 && arr[preIndex] > current) {
    
                arr[preIndex + 1] = arr[preIndex];
    
                preIndex--;
    
            }
    
            arr[preIndex + 1] = current;
    
        }
    
        return arr;
    
    }

    本文转载自:https://segmentfault.com/a/1190000020072884

    如果这篇文章对您有帮助,您可以打赏我

    技术交流QQ群:15129679

  • 相关阅读:
    New version of VS2005 extensions for SharePoint 3.0
    QuickPart : 用户控件包装器 for SharePoint Server 2007
    随想
    发布 SharePoint Server 2007 Starter Page
    如何在SharePoint Server中整合其他应用系统?
    Office SharePoint Server 2007 中文180天评估版到货!
    RMS 1.0 SP2
    SharePoint Server 2007 Web内容管理中的几个关键概念
    如何为已存在的SharePoint站点启用SSL
    Some update information about Office 2007
  • 原文地址:https://www.cnblogs.com/yeminglong/p/15152120.html
Copyright © 2011-2022 走看看