考研資料結構與演算法之排序專題二 氣泡排序及優化

2021-06-28 12:44:01 字數 1202 閱讀 8823

氣泡排序顧名思義就是由於在排序過程中總是小數往前放,大數往後放,相當於氣泡上公升。

基本思想:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。然後從頭開始比較,比較n-2次,第二次結束,重複以上操作

至排序結束。

測試譚浩強版氣泡排序(b_s_tan)對隨機生成的10000個數的陣列進行排序所用時間為0.974s(每次執行所需時間不同)

優化後的氣泡排序(b_s_op)隨機生成100 000個數的陣列進行排序所用時間僅為 0.004s(每次執行所需時間較大不同)

設定乙個flag個標誌,如果這一趟排序發生了交換,則將flag置為true,否則為flase,顯然如果一趟排序沒有發生交換則說明陣列已排好序。

**如下:

#include #include #include #define bool int

#define true 1

#define false 0

#define size 100000

void b_s(int s, int n)

} if (pos)

return; }}

void b_s_tan(int s,int n)

} }printf("the sorted numbers:\n");

}void b_s_op(int s, int n)

k--;

} } int main(int argc, char *argv)

start = clock();

b_s_op(s,size);

//b_s_tan(s, size);

//b_s(s,size);

finish = clock();

total_time = (double)(finish - start) / clocks_per_sec;

printf("%d個數的執行時間為%.3f\n", size, total_time);

/*for (i = 0; i < size; i++)

printf("%d ", s[i]);*/

printf("\n");

system("pause");

}

考研 資料結構 排序演算法

include include using namespace std 排序演算法 時間複雜度 最好,最壞,平均 插入排序 void insert sort int arr,int n arr j 1 temp 折半插入排序 void insert02 sort int arr,int n else...

專題 資料結構與演算法

圖的最優路徑 一定要有表頭!一切操作基於表頭!執行緒池的原理就是基於表頭操作!void fun int n int main void 呼叫時一直往裡呼叫,終止點一直往外返回。利用這個特點咱們可以解決很多問題。typedef struct list struct list struct data s...

考研資料結構 排序

人生哪有最好,把每乙個當下做到最好,就很不錯了呀。以下以考試主要考查的重點內容為主體,講述過程以方便大家記憶為上,並不面面俱到。首先得知道排序分內部排序和外部排序。內部排序 排序整個過程中資料在記憶體中。外部排序 排序整個過程中資料會有出現在內 外存之間調動的情況。考研主要考內部排序。內部排序主要分...