冒泡排序

90 阅读1分钟

实现原理

数组中有 n 个数,比较每相邻两个数,如果前者大于后者,就把两个数交换位置;这样一来,第一轮就可以选出一个最大的数放在最后面;那么经过 n-1(数组的 length - 1) 轮,就完成了所有数的排序。

我们先来实现找数组中的最大数,并把他放到数组最后

 let arr = [2,4,3,5,1]
// 遍历数组,次数就是arr.length - 1
for (let i = 0; i < arr.length - 1; i++) {
	// 如果前一个数 大于 后一个数 就交换两数位置
	if (arr[i] > arr[i + 1]) {
		var temp = arr[i];
		arr[i] = arr[i + 1];
		arr[i + 1] = temp;
	}
}
console.log(arr)  // [2, 3, 4, 1, 5]

我们能找到数组中最大的数,放到最后,这样重复 arr.length - 1 次,便可以实现数组按从小到大的顺序排好

 let arr = [2,4,3,5,1]
// 遍历数组,次数就是arr.length - 1
for (let i = 0; i< arr.length - 1; i++) {
	// 这里 j < arr.length - 1 ,要思考思考合适吗?我们下面继续说
	for (var j = 0; j < arr.length - 1; j++) {
        if (arr[j] > arr[j + 1]) {
            var temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
	}
}
console.log(arr)  // [1, 2, 3, 4, 5]

利用sort()方法实现冒泡排序

升序

 <script>
    //   从大到小的排序
    let arr = [2,4,3,5,1]
    // 遍历数组
    for(let i =0;i<arr.length-1;i++){
        for(let j=0;j<arr.length-i-1;j++){
            // 开始交换 但是前提 第一个数大于第二个数才交换
            if(arr[j]>arr[j+1]){
                // 交换2个变量
                let temp = arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            };
        };
    };
    // arr.sort();//排序
    // sort //升序排列
    arr.sort(function (a,b){
      return a-b;
    });
    console.log(arr);

降序

 <script>
    //   从大到小的排序
    let arr = [2,4,3,5,1]
    // 遍历数组
    for(let i =0;i<arr.length-1;i++){
        for(let j=0;j<arr.length-i-1;j++){
            // 开始交换 但是前提 第一个数大于第二个数才交换
            if(arr[j]>arr[j+1]){
                // 交换2个变量
                let temp = arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            };
        };
    };
    // arr.sort();//排序
    // sort()降序
    arr.sort(function(a,b){
        return b-a;
    });
    console.log(arr);