冒泡排序、选择排序、插入排序、快速排序

冒泡排序

思路讲解:
  1. 冒泡排序首先我们需要用到两层for循环,第一层控制冒泡的次数
  2. 第二层for循环就是记录我们要比较大小的比较次数
  3. 判断,用第一个值很后一个值比较大小,这里我是用从小到大排序,那么如果前面的值大于后一个,那就和后一个值换位置
 function bubbleSort(array){
              //冒泡的次数
              for(var i=1;i<array.length;i++){
              //第二层记录比较次数
                  for(var j=0;j<array.length-i;j++){
                      //比较大小
                      if(array[j]>array[j+1]){
                          //换位置
                          //先保留j位置的值
                          var temp = array[j] 
                           //将j+1位置的值赋值给j位置
                          array[j] = array[j+1]
                          //将开始保存的j位置的值赋给j+1位置
                          array[j+1] = temp 
                      }
                  } 
              }
               return array
          }
           bubbleSort(arr)

选择排序

思路讲解:
  1. 也是用两层循环,第一层循环需要设置一个最小值或者最大值用来比较大小,我这里选择设置最小值为min,每次选择当前的第一个数为这个值
  2. 这个值跟后面所有的值去比较,然后对应的比我这个值还小的 把下标记录起来 将这个下标赋值给min
  3. 判断min是否是我前面给到的值 如果是不做操作 如果不是交换位置
for(var i=0;i<array.length-1;i++){//只剩一个数就不比了
                  //设置第一个数为最小值
                  var min = i
                  for(var j=i+1;j<array.length;j++){
                      if(array[min]>array[j]){ //如果比最小值还小
                          min = j //使用min记录一下比这个值
                      }
                  }
                  if(min!=i){
                      //min不指向我们开始指定的下标位置
                      //换位置
                      var temp = array[i]
                      array[i] = array[min]
                      array[min] = temp
                  }
              }
          }

插入排序

思路讲解:这里我用了三种方法,第一种有一点小bug但是容易理解里面的思路,第二种改良版效率高,第三种也是比较完美的适合初学者学习思路
  1. 插入排序从后往前比 初始下标为1
  2. 第一次比较为1和0比较 比较一次,第二次比较为2和1比较 1和0比较 比较俩次, 后面持续递增
    3.最后也是做判断换位置
**第一种插入排序方法**
for (var i = 1; i < array.length; i++) {   //循环遍历数组
 		//取出第一个排序值的下标,逐渐向前一个数比较
                for (var j = i; j > 0; j--) {  
                    if (array[j - 1] > array[j]) {
                        var temp = array[j - 1]
                        array[j - 1] = array[j]
                        array[j] = temp
                    }
                }
            }
           console.log(array);
    ```
 **第二种插入排序方法**

```javascript
 for (var i = 1; i < array.length; i++) {
                var preIndex = i - 1 //获取前一个下标
                var current = array[i] //先保存当前的值 为防止
                while (preIndex >= 0 && current < array[preIndex]) {
                    //如果前一个下标大于等于0 和 当前的值为小于上一个
                    //就将本身这个位置的值赋值为上一个
                array[current] = array[preIndex] 
                    preIndex-- //递减 继续往前走

                }
                array[preIndex + 1] = current //当前的位置的值等于原本位置的值
            }
**第三种插入排序方法**
  var array = [5, 2, 6, 4, 3, 7, 1]
        function insert(array) {
            //准备一个新数组,用来存储用来比较的第一个数
            var handle = [];
            handle.push(array[0]);
            for (var i = 1; i < array.length; i++) {
                //拿到我们要比较的数
                var A = array[i]
                for (var j = handle.length - 1; j >= 0; j--) {
                    //用我们要插入的数A和新数组里面的每个数作比较
                    var B = array[j]
                    if (A > B) {
          //如果要插入的数A大于新数组里面的数,就利用splice把他插入到j的后面
                        handle.splice(j + 1, 0, A);
                        break;//此时需要插入的数已经排序完毕就跳出循环
                    }
                    //已经比到第一项,我们把新比较的数放到手中的最前面即可
                    if (j === 0) {
                        handle.unshift(A)
                    }

                }
            } return handle
        }
        var t = insert(array)
        console.log(t);

快速排序

思路讲解:
  1. 快速排序是在数据量不是很大的时候排序速度最快的
  2. 因为它是从中间同时向两边排序
  3. 所以我们需要定义三个变量用来存储
 var array2 = [5, 23, 1, 8, 44, 3, 2, 86, 4, 32, 6]
        function quickSort(array2) {
            if (array2.length <= 1) { //长度为1或者小于1退出
                return array2
            }
            var centerIndex = Math.round(array2.length / 2) //取中间值下标
            var center = array2.splice(center, 1)[0] //接收删除的中间值
            var left = [] //左边的数组
            var right = [] //右边的数组
            for (var i = 0; i < array2.length; i++) { //循环遍历
                if (array2[i] < center) { //小于中间值 加到左边
                    left.push(array2[i])
                } else {
                    right.push(array2[i])//大于中间值 加到左边
                }
            }
            //返回合并的数组
            return quickSort(left).concat([center], quickSort(right));
        }
        console.log(quickSort(array2));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值