冒泡排序优化

Posted halo-yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序优化相关的知识,希望对你有一定的参考价值。

1、冒泡排序从头到尾的扫描,冒泡排序每一次扫描是把前边未排好序的项中最大的项移到后面 。O :n *  n的2开方。

优化1:若前边的项是有序的,方案1依然会做无谓的扫描。可以设置一个boolean的标志位,若上一次进行了交换才进入下一轮扫描。

优化2:若排序中有一段是有序的,也不需要重复的扫描。可以把最后一次交换的位置提出来,下次扫描把这个位置作为最大的扫描位置。

//优化2的实现
int bubble(vector<int>* vector1,int lo,int hi){
    int last= 0;
    while(++lo<hi){
        if((*vector1)[lo] < (*vector1)[lo-1]){
            int temp = (*vector1)[lo];
            (*vector1)[lo] = (*vector1)[lo-1];
            (*vector1)[lo-1] = temp;
            last = lo;
        }
    }
    return last;
}

int main() {
    vector<int> vector1(10);
    vector1[0] = 0;
    vector1[1] = 42;
    vector1[2] = 26;
    vector1[3] = 53;
    vector1[4] = 44;
    vector1[5] = 93;
    vector1[6] = 62;
    vector1[7] = 38;
    vector1[8] = 82;
    vector1[9] = 92;

    int m = vector1.size();
    int lo = 0;
    while (0< (m = bubble(&vector1,lo,m))){

    }

    for (int i = 0; i < vector1.size(); ++i) {
        printf("第%d个元素是%d
",i,vector1[i]);
    }

    return 0;
}

 

以上是关于冒泡排序优化的主要内容,如果未能解决你的问题,请参考以下文章

给自己五分钟,彻底搞懂并优化冒泡排序

给自己五分钟,彻底搞懂并优化冒泡排序

视频+图文+动画详解冒泡排序

冒泡排序

冒泡排序及优化

小白学算法11. 排序算法-冒泡排序,以及优化