氣泡排序與簡單排序
阿新 • • 發佈:2019-01-03
氣泡排序:
氣泡排序改進版本:氣泡排序 通過相鄰點進行比較,每次將最大的一個數字沉底,設定一個標誌位,如果在一次排序中沒有進行交換可以推斷該陣列已經有序,然後退出循化,結束該函式。其空間複雜度複雜度是O(1),最好的情況初始陣列是有序的,一次下來結束O(n),最壞情況就是整個陣列要經過O(n*n)次比較,則此是陣列是倒序時的情況,每一次的循化,陣列中的最後一個值移動到最前面的。
選擇排序:bool bubble(int *arr, int len) { if(arr == NULL || len<1) { return false; } for(int i=0; i<len; i++) { int tag = 0; for(int j=0; j<len-1-i; j++) { if(arr[j] > arr[j+1]) { swap(arr+j, arr+j+1); tag = 1; } } if (tag == 0) { return true; } } return true; }
選擇排序 通過每次在剩下的數字中間選出最小的一位,然後將其與剩下的陣列中的第一位進行交換。最好的情況就是順序的,第一個是最小的,但還要通過多次的比較,只是不需要進行交換的操作。最壞的情況就是每次比較後找到該值並且進行交換,其陣列的初始化是亂序或者倒序。
bool select(int *arr, int len) { if (arr == NULL || len < 1) { return false; } int j = 0; int k = 0; for (int i=0; i<len; i++) { int min = *(arr+i); for(j=i; j<len; j++) { if (min > arr[j]) { min = arr[j]; k = j; } } swap(arr+i, arr+k); } return true; }