美文网首页iOS面试
iOS开发之一排序算法

iOS开发之一排序算法

作者: NanNan | 来源:发表于2022-02-17 18:27 被阅读0次

    算法复杂度是指算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。

    123.png 456.png
    [图片上传中...(123.png-232f52-1645076222677-0)]
    
    1、稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
    2、不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
    3、时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
    4、空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 
    

    1、冒泡排序 (相邻比较)

    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;
    }
    

    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;
    } 
    

    3、插入排序

    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;
    }
    
    

    4、归并排序(先分后治)

    function mergeSort(arr) {
        var len = arr.length;
        if (len < 2) {
            return arr;
        }
        var middle = Math.floor(len / 2),
        var left = arr.slice(0, middle),
        var right = arr.slice(middle);
        return merge(mergeSort(left), mergeSort(right));
    }
     
    function merge(left, right) {
        var result = [];
     
        while (left.length>0 && right.length>0) {
            if (left[0] <= right[0]) {
                result.push(left.shift());
            } else {
                result.push(right.shift());
            }
        }
     
        while (left.length)
            result.push(left.shift());
     
        while (right.length)
            result.push(right.shift());
     
        return result;
    }
    
    

    或者

    好文章值得分享:

    十大经典排序算法(动图演示)

    https://blog.csdn.net/zzu_seu/article/details/99716697

    相关文章

      网友评论

        本文标题:iOS开发之一排序算法

        本文链接:https://www.haomeiwen.com/subject/zgnjlrtx.html