冒泡排序和选择排序

227 阅读3分钟

一。 冒泡排序

原理:

相邻的数据进行两两比较,小数放在前面,大数放在后面,这样一趟下来,最小的数就被排在了第一 位, 第二趟也是如此,如此类推,直到所有的数据排序完成。

        规律:
            冒泡排序每一轮排序,都可以找出一个较大的值,放在最后面
        结论:
            比较轮数 = 数组长度 - 1;
            每一轮比较的次数 = 数组长度 - 当前的轮数

            要点分析:
                1、 双层循环
                2、外层循环 (控制每次),    内层循环  (需要遍历 ,到最大长度)。
                    (因为经过一次内层遍历可以把一个元素放置在正确位置,
                    因此下次内层循环的最大长度只需要数组长度减1)
                3、内层循环控制找出最大的数字并交换到数组最后面。
                把一个乱序的数组按照一定的算法结果排序好

            1:交换两个数据的位置,利用第三个变量
                var tmp = arr[0];
                arr[0] = arr[1];
                arr[1] = tmp;
        口诀
            双层 for 循环,一层减一次,里层减外层,变量相交换 (目的:比较数组中的数值大小)
        
        let arr = [5,4,3,2,1]
        5,4,3,2,1
        第一次比较      5-1
            4 5 3 2 1
            4 3 5 2 1
            4 3 2 5 1
            4 3 2 1 5
        第二次        5-2
           3 4 2 1 5
           3 2 4 1 5
           3 2 1 4 5
        第三次         5-3
           2 3 1 4 5
           2 1 3 4 5
        第四次          5-4
           1 2 3 4 5
        结论:
            比较轮数 = 数组长度 - 1;
            每一轮比较的次数 = 数组长度 - 当前的轮数

 两个变量交换数值
         let a = 10
        let b = 20
        let c ;
        c = a     // a =   10
        a = b     // a = 20
        b = c     // b = 10
        console.log(a,b);
        
        

一个数组的排序

        let arr = [5, 6, 3, 4, 1, 100, 89]
    // 双重For循环,一层减一次,里层减外层,变量相交换
    //   arr.length为数组长度,冒泡排序比较轮数等于数组长度-1(也就是一层减一次)
    for (i = 0; i < arr.length - 1; i++) {
        // arr.length-1-i就代表每一轮比较的次数等于数组长度-当前轮数(里层减外层)
        for (j = 0; j < arr.length - 1 - i; j++) {
            // 每一次对比是前面的一个数和后面的一个数做对比(arr[j]>arr[j+1])                               
            if (arr[j] > arr[j + 1]) {                                                            
                //   设置一个变量map=arr[j+1],就是map=arr[j+1]的值,arr[j+1]的值保持不变              
                let map = arr[j + 1]
                //   设置arr[j+1]=arr[j],就是把arr[j]的值给arr[j+1],arr[j]不变                       l
                arr[j + 1] = arr[j]
                //   map的值给arr[j]                                                        arr[j] = map

            }
        }
    }
    console.log(arr)

1.png

二。选择排序

   规则:
        选出一个位置,让这个位置上的数和后面所有的数进行比较,如果比较出大小就交换两个数的位置
    规律:
        每一轮都能选出一个最小数,放在选中的位置上
    结论:
        比较的轮数 = 数组的长度 - 1;
        每一轮比较的次数 = 数组长度 - 当前的轮数;
        
        
                            选择排序
                            [5,4,3,2,1]
                          
                       5-1    第一次比较
                                4 5 3 2 1
                                3 5 4 2 1
                                2 5 4 3 1
                                1 5 4 3 2
                       5-2    第二次
                                1 4 5 3 2
                               1 3 5 4 2
                               1 2 5 4 3
                      5-3      第三次
                               1 2 4 5 3
                               1 2 3 5 4
                      5-4     第四次
                               1 2 3 4 5
                               
                               

一个数组的排序

      <script>
let arr = [5,4,3,2,1]
// 外层  比较的是次数   
    for(let i = 0;i<arr.length-1;i++){
        // 内层  j =i   每一层比较的次数
        for (let j = i; j < arr.length; j++) {
            // 位置上的元素
            // j > j + 1
            // j > i     j  是次数    i 轮数 位置
            // arr[j]   内层循环 遍历的数值
            // arr[i]   外层循环遍历的位置
            if (arr[j] < arr[i]) {
                let tmp = arr[i]
                arr[i] = arr[j]
                arr[j] = tmp
            }
        }
    }
    console.log(arr);
 </script>

12.png