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

 

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