冒泡排序(c/c++算法学习过程笔记)

一、思想


像冒泡一样,从前到到后遍历数组,前后做对比,前面比后面大的则交换(升序)


二、冒泡排序(未优化的)代码实现,升序:遍历找出最大值,时间复杂度O(n平方)

void swap(int* num1,int*num2){
    int temp;
    temp = *num1;
    *num1 = *num2;
    *num2 =  temp;
}
void bullurSort(int* list,int len){
    for (int i = 0; i < len-1; ++i) {
        //注意k还是从0开始,
        for (int k = 0; k < len-1; ++k) {
            if (list[k]>list[k+1]){
                swap(&list[k],&list[k+1]);
            }
        }
    }
}

三、优化的冒泡排序,时间复杂度O(n平方)

优化一、k < len-1-i,前面已经排好序的就不用再比较了

优化二、如果一次排序过程都不用交换了,说明后面的都排序好了,就提前退出遍历,引入flag标志来判断

void swap(int* num1,int*num2){
    int temp;
    temp = *num1;
    *num1 = *num2;
    *num2 =  temp;
}
void optimizeBullurSort(int* list,int len){
    bool flag = false;
    for (int i = 0; i < len-1; ++i) {
      
        flag = false;  
        for (int k = 0; k < len-1-i; ++k) {
            if (list[k]>list[k+1]){
                swap(&list[k],&list[k+1]);
                flag = true;
            }
        }
        if(!flag){
            break;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值