js选择排序和冒泡排序

451 阅读1分钟

区别

1.冒泡排序是比较相邻位置的两个数,而选择排序是按顺序比较,找最大值或者最小值;
2.冒泡排序每一轮比较后,位置不对都需要换位置,选择排序每一轮比较都只需要换一次位置;
3.冒泡排序是通过数去找位置,选择排序是给定位置去找数;

冒泡排序的优缺点

1.优点:比较简单,空间复杂度较低,是稳定的;
2.缺点:时间复杂度太高,效率慢;

选择排序优缺点

1.优点:一轮比较只需要换一次位置;
2.缺点:效率慢,不稳定(举个例子5,8,5,2,9   我们知道第一遍选择第一个元素5会和2交换,那么原序列中2个5的相对位置前后顺序就破坏了)。

冒泡排序实现

        //冒泡排序
        function bubble(arr) {
            // 判断传入的数组是否为空或者数组长度小于2
            if (arr == null || arr.length < 2) {
                return arr;
            }
            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]) {
                        swap(arr, j, j + 1);
                    }
                }
            }
            return arr;
        }

        //异或运算  进行两数交换
        function swap(arr, i, j) {
            arr[i] ^= arr[j];
            arr[j] ^= arr[i];
            arr[i] ^= arr[j];
        }
        console.log(bubble([1, 5, 2, 4, 8, 9, 10]));

注:异或运算

选择排序实现

        //选择排序
        function selectionSort(arr) {
            // 判断传入的数组是否为空或者数组长度小于2
            if (arr == null || arr.length < 2) {
                return arr;
            }

            //循环遍历 
            for (var i = 0; i < arr.length - 1; i++) {
                //声明最小值下标
                var minIndex = i;
                for (var j = i + 1; j < arr.length; j++) {
                    minIndex = arr[j] < arr[minIndex] ? j : minIndex;
                }
                swap(arr, i, minIndex);
            }
            return arr;
        }

        // 两个数交换
        function swap(arr, i, j) {
            var temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        console.log(selectionSort([1, 5, 7, 2, 4, 6, 9]));