排序 冒泡法(改進)

2021-09-07 12:10:55 字數 1340 閱讀 9300

排序過程:

將第乙個記錄的keyword與第二個記錄的keyword進行比較,若為逆序r[1].key > r[2].key,則交換;然後比較第二個記錄與第三個記錄;依次類推,直至第n - 1個記錄和第n個記錄比較為止,第一趟氣泡排序,結果keyword最大的記錄被安置在最後乙個記錄上。

對前n - 1個記錄進行第二趟氣泡排序。結果使keyword次大的記錄被安置在第n - 1個記錄位置。

反覆上述過程,直到「在一趟排序過程中沒有進行過交換記錄的操作」為止。

時間複雜度o(n^2)

簡單版:

#include #include #include #include using namespace std;

int arr[10000];

void myswap(int &a, int &b)

void bubblesort(int *a, int len)

} }}void printarray(int *a, int len)

cout << setw(3) << a[i] << ' ';

} cout << endl;

}int main()

cout << "before sorting:\n";

printarray(arr, len);

bubblesort(arr, len);

cout << "after sorting:\n";

printarray(arr, len);

return 0;}/*

please input length of array: 20

before sorting:

70 53 65 69 99 67 36 49 66 16

58 73 65 20 75 30 93 8 42 57

after sorting:

8 16 20 30 36 42 49 53 57 58

65 65 66 67 69 70 73 75 93 99

*/

改進:記住最後一次交換發生的位置lastexchange,下一趟排序開始時,r[1...lastexchange]是無序區,r[lastexchange...n]是有序區。這樣一趟排序可能使當前有序區擴充多個記錄,從而降低排序的趟數。

僅僅需改進bubllesort函式:

void bubblesort(int *a, int len)

} i = (lastexchange < i ? lastexchange : i - 1);

}}

氣泡排序法改進

void bubblesort int a,int n m nfalg void bs int a,int n m nfalg printf m d n m printf 第 d次冒泡 n count 選擇排序 從無序序列裡面選乙個最大的或者最小的替換有序序列最後乙個位置 void selectso...

氣泡排序法的改進

1 冒泡法思想 將相鄰兩個數比較,將小的調到前頭。排序過程 n 10 1 比較第乙個數與第二個數,若為逆序即a 0 a 1 則交換 然後比較第二個數與第三個數 依次類推,直至第n 1個數和第n個數比較為止 第一趟氣泡排序。結果 最大數放在最後1個位置 a n 1 2 對前n 1個數進行第二趟氣泡排序...

改進 優化 冒泡法排序

class bubblesort j static void print int mintarr i static void change refint i1,ref inti2 static void bubblesort int a,outintn 如果查詢一次後發現不需交換,說明已經排完序 可...