排序算法

1、冒泡排序(最基础的排序)O(n^2)

        //冒泡排序核心点 俩个for循环嵌套 第一个趟数 相当于length-1 第二个每趟比较的时间是递减的

        //相邻的俩个相比 j和j+1相比

        function bubble(arr) {

            //遍历数组

            for (var i = 1; i < arr.length; i++) {

                //判断对应的没有比较的值 没有确定位置的值

                for (var j = 0; j < arr.length - i; j++) {

                    //相邻的俩个进行比较

                    if (arr[j] > arr[j + 1]) {

                        //换位置

                        var temp = arr[j]

                        arr[j] = arr[j + 1]

                        arr[j + 1] = temp

                    }

                }

            }

            return arr

        }

        var arr = [10, 18, 58, 78, 48, 38]

        console.log(bubble(arr));

2、选择排序(选择最大值 或者最小值的下标 进行比较的排序)

        function selecter(arr) {

            //遍历数组

            for (var i = 0; i < arr.length; i++) {

                var min = i //记录最小下标 默认当前的i值

                for (var j = i + 1; j < arr.length; j++) { //遍历后面的内容

                    //如果当前值比最小值还小

                    if (arr[j] < arr[min]) {

                        //记录一下这个下标

                        min = j

                    }

                }

                //判断当前最小下标是否为开始的默认下标 不是就换位置

                if (min != i) {

                    //换位置

                    var temp = arr[min]

                    arr[min] = arr[i]

                    arr[i] = temp

                }

            }

            return arr

        }

        var arr = [18, 58, 68, 38, 78, 28, 8]

        console.log(selecter(arr));

3、快速排序(在数据量低于十万内最快的 在数据量不多的情况下最快的 是冒泡排序的进阶)二分O(nLogn)

        function quick(arr) {

            if (arr.length <= 1) {

                return arr

            }

            //定义左边的数组 右边的数组 基数

            var left = []

            var right = []

            var mif = arr[0]

            //遍历数组

            for (var i = 1; i < arr.length; i++) {

                arr[i] > mid ? right.push(arr[i]) : left.push(arr[i])

            }

            return quick(left).concat([mid], quick[right])

        }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 排序算法的时间复杂度 排序的分类 1.冒泡排序(Bubble Sort) 好的,开始总结第一个排序算法,冒泡排序。...
    冬_84fe阅读 385评论 1 2
  • 内容几乎完全来源于网络,整理人:hustcc 来源:https://github.com/hustcc/JS-So...
    良月柒阅读 537评论 0 1
  • 冒泡排序,选择排序,插入排序(直接插入,二分插入,希尔排序),快速排序,堆排序,归并排序,计数排序,桶排序,基数排...
    亮涛阅读 308评论 0 0
  • 前言 排序算法可能是你学编程第一个学习的算法,还记得冒泡吗? 当然,排序和查找两类算法是面试的热门选项。如果你是一...
    无脚鸟30阅读 981评论 0 0
  • 1.冒泡排序 最简单的排序实现,冒泡排序,是一种交换排序,它的基本思想是:凉凉比较相邻记录的关键字,如果反序则交换...
    编程小世界阅读 289评论 0 0