冒泡、选择和快速排序

1. 冒泡排序

思想(从小到大排序):遍历数组,依次比较两个相邻的元素,如果它们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。重复上述操作直至没有相邻元素需要交换,也就是说该元素列已经排序完成。(str.length-1-i为内层循环的临界值(i为外层循环索引))。

在这里插入图片描述

/*从大到小排序*/
 var str = "1232456789";
    function bubbleSort(str) {
        var arr = str.split("");
        var temp = "";
        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]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        console.log(arr);
    }
    bubbleSort(str);
结果:

在这里插入图片描述

2. 选择排序

思想:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。(在选择最大/最小值时,用一个变量存储最大/最小值对应的索引。在遍历完一次数组后,再进行赋值(赋值到首部/尾部))

在这里插入图片描述

/*从小到大排序*/
  function selectionSort(str) {
        var arr = str.split("");
        for (var i = 0; i < arr.length - 1; i++) {
            var min = i;
            for (var j = i + 1; j < arr.length; j++) {
                if (arr[min] > arr[j]) {
                    min = j;
                }
            }
            var temp = arr[i];
            arr[i] = arr[min];
            arr[min] = temp;
        }
        console.log(arr)
    }

    selectionSort(str);
结果:

在这里插入图片描述

3. 快速排序

思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    function quickSort(arr) {
        if (arr.length <= 1) {
            return arr;
        }
        var temp = parseInt(arr.length / 2);
        var center = arr[temp];
        arr.splice(temp,1);//每个找到数组中的中间索引对应的值。记录并去除
        var left = [];
        var right = [];
        for (var i = 0; i < arr.length; i++) {//对除去中间索引对应的值的数组进行遍历,将大于中间索引对应的值放到left数组中,小于其值的放到right数组中
            if (arr[i] > center) {
                left.push(arr[i])
            } else {
                right.push(arr[i])
            }
        }
        return quickSort(left).concat(center).concat(quickSort(right));
    }

    console.log(quickSort(str.split("")));
结果:

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值