常见的排序算法----冒泡排序(交换排序类,JavaScript实现)

本文深入讲解冒泡排序算法,包括其基本思想、两种常见写法、改进方法及时间复杂度分析。冒泡排序通过两两比较相邻元素并交换,直至序列有序。改进版能提前结束排序,提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序

基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。

最简单排序实现

function simpleSort(arr) {
	for(var i = 0; i < arr.length; i++) {
		for(var j = i+1; j < arr.length; j++) {
			if(arr[i] > arr[j]) {
				swap(arr, i ,j);
			}
		}
	}
}
function swap(arr, i, j) {
	var save = arr[j];
	arr[j] = arr[i];
	arr[i] = save;
}

冒泡排序

// 第一种写法,把最大值压在右边,不用再处理右边
function bubleSort(arr) {
    for(var i = 0 ; i < arr.length; i++) {  //需要对比几轮
        for(var j = 0; j < arr.length-i-1; j++) {  //此轮需要对比几次,向前换
            if(arr[j] > arr[j+1]) {
                swap(arr, j, j+1);
            }
        }
    }
}

// 第二种写法,把最小值压在左边,不用再处理左边
function bubleSort(arr) {
    for(var i = 0 ; i < arr.length; i++) {  //需要对比几轮
        for(var j = arr.length-2; j >= i; j--) {  //此轮需要对比几次,向后换
            if(arr[j] > arr[j+1]) {
                swap(arr, j, j+1);
            }
        }
    }
}

改进的冒泡排序

function bubleSort(arr) {
	var flag = true;
    for(var i = 0 ; i < arr.length && flag; i++) {  //需要对比几轮
    	flag = false;
        for(var j = 0; j < arr.length-i-1; j++) {  //此轮需要对比几次,向前换
            if(arr[j] > arr[j+1]) {
                swap(arr, j, j+1);
                flag = true;
            }
        }
    }
}

function bubleSort(arr) {
	var flag = true;
    for(var i = 0 ; i < arr.length && flag; i++) {  //需要对比几轮
    	flag = false;
        for(var j = arr.length-2; j >= i; j--) {  //此轮需要对比几次,向后换
            if(arr[j] > arr[j+1]) {
                swap(arr, j, j+1);
                flag = true;
            }
        }
    }
}

在有一轮没有数据进行交换的时候,将表明后序的轮次不会再数据交换,不必再循环了


时间复杂度分析
未改进的时候:
最好和最坏情况的复杂度:O(n^2)

改进后:
最好情况的复杂度:O(n)
最坏情况的复杂度:O(n^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值