冒泡排序(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;
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章