日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

排序 - 冒泡法(改进)

發布時間:2024/1/17 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序 - 冒泡法(改进) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

排序過程:

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

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

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

時間復雜度O(n^2)

簡單版:

#include <iostream> #include <cstdio> #include <ctime> #include <iomanip> using namespace std;int arr[10000];void mySwap(int &a, int &b) {int t = a;a = b;b = t; }void bubbleSort(int *a, int len) {bool alreadySort = false; // 記錄假設已經排序完畢,能夠提前退出for (int i = len - 1; i >= 0 && !alreadySort; i--) { // 從后往前排序alreadySort = true;for (int j = 0; j < i; j++) {if (a[j] > a[j + 1]) {mySwap(a[j], a[j + 1]);alreadySort = false;}}} }void printArray(int *a, int len) {for (int i = 0; i < len; i++) {if (i != 0 && i % 10 == 0) {cout << endl;}cout << setw(3) << a[i] << ' ';}cout << endl; }int main() {srand(time(0));cout << "Please input length of array: ";int len;cin >> len;for (int i = 0; i < len; i++) {arr[i] = rand() % 100;}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) {bool alreadySort = false; // 記錄假設已經排序完畢。能夠提前退出for (int i = len - 1; i >= 0 && !alreadySort;) { // 從后往前排序alreadySort = true;int lastExchange = i; // 記住最后一次交換的位置,能夠降低排序趟數for (int j = 0; j < i; j++) {if (a[j] > a[j + 1]) {mySwap(a[j], a[j + 1]);alreadySort = false;lastExchange = j;}}i = (lastExchange < i ? lastExchange : i - 1);} }

總結

以上是生活随笔為你收集整理的排序 - 冒泡法(改进)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。