資料結構和演算法:03.冒泡、選擇排序

eastRiseWm發表於2020-10-30

具體程式碼請看:NDKPractice專案的datastructure

知識點:

1. 巨集定義Log列印

#define TAG "TAG"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__)
// 其他方法的定義 __android_log_print 取了一個別名(引數固定,可變)

2. rand() 隨機

//  輸出 0 到 49 之間的隨機數
 rand() % 50

3. 氣泡排序

思想:相鄰兩個數進行比較,如果前面的比後面的大,就進行交換,否則不需要交換
複雜度:時間複雜度和空間複雜度都是 O(n的平方) ,可以優化的

在這裡插入圖片描述

void bubbleSort(int arr[],int len){
    for (int i = 0; i < len - 1; ++i) { // 外迴圈代表迴圈次數 n - 1 步
        for (int j = 0; j < len - i - 1; ++j) { // 內迴圈代表一次迴圈對比的次數 n-1,n-2,n-3,1
            if(arr[j] > arr[j+1]){
                // 交換 一次交換是三次賦值
                swap(arr[j],arr[j+1]);
            }
        }
    }
}

4. 選擇排序

思想: 遍歷找出最小的位置,最後與第一個位置交換
複雜度:空間複雜度是:O(1),耗費的時間比上邊未優化的氣泡排序要少很多

在這裡插入圖片描述

void selectSort(int arr[],int len){
    for (int i = 0; i < len - 1; ++i) { // 外迴圈代表迴圈次數 n - 1 步
        int min = i;
        for (int j = i+1; j < len; ++j) {  // 內迴圈代表一次迴圈對比的次數
            if(arr[min] > arr[j]){
                min = j;
            }
        }
        swap(arr[min],arr[i]);
    }
}

相關文章