氣泡排序的實現和優化及其與插入,選擇排序的比較

2021-09-01 05:48:00 字數 1849 閱讀 6696

測試**:

#ifndef optional_01_bubble_sort_sorttesthelper_h

#define optional_01_bubble_sort_sorttesthelper_h

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

namespace sorttesthelper

// 生成乙個近乎有序的陣列

// 首先生成乙個含有[0...n-1]的完全有序陣列, 之後隨機交換swaptimes對資料

// swaptimes定義了陣列的無序程度

int *generatenearlyorderedarray(int n, int swaptimes)

return arr;

}// 拷貝整型陣列a中的所有元素到乙個新的陣列, 並返回新的陣列

int *copyintarray(int a, int n)

// 列印arr陣列的所有內容

templatevoid printarray(t arr, int n)

// 判斷arr陣列是否有序

templatebool issorted(t arr, int n)

// 測試sort排序演算法排序arr陣列所得到結果的正確性和演算法執行時間

templatevoid testsort(const string &sortname, void (*sort)(t, int), t arr, int n)

}#endif //optional_01_bubble_sort_selectionsort_h

插入排序**:

#ifndef optional_01_bubble_sort_insertionsort_h

#define optional_01_bubble_sort_insertionsort_h

#include #include using namespace std;

templatevoid insertionsort(t arr, int n)

return;

}#endif //optional_01_bubble_sort_insertionsort_h

氣泡排序以及優化**:

#include #include #include "sorttesthelper.h"

#include "selectionsort.h"

#include "insertionsort.h"

using namespace std;

// 第一版bubblesort

templatevoid bubblesort( t arr , int n)

// 優化, 每一趟bubble sort都將最大的元素放在了最後的位置

// 所以下一次排序, 最後的元素可以不再考慮

n --;

}// 第二版bubblesort,使用newn進行優化

templatevoid bubblesort2( t arr , int n)

n = newn;

}while(newn > 0);

}int main() {

int n = 20000;

// 測試1 一般測試

cout測試結果:

基本排序及其優化 冒泡 選擇 插入

話不多說,小知識先走一波 如何不使用額外變數完成陣列不同位置值的交換?不使用第三個變數,交換陣列不同的數值 param arr param x param y public static void swap int arr,int x,int y 注 在陣列這樣做有些地方會出現bug,比如快排中,陣...

python實現氣泡排序及其優化

氣泡排序是排序演算法中比較基礎的部分,簡單原理就是 將數量大小比作輕重不同的氣泡,輕的氣泡會冒到重的氣泡之上的思想 最原始的排序 如下 def bubblesort numlist ifnot len numlist return for i in range len numlist for j i...

氣泡排序及其優化(C 實現)

include includeusing namespace std 氣泡排序的特點 每一輪冒泡過後,在過去一輪遍歷中訪問過的元素中的最大元素 一定會到達它最終應當處在的位置。基礎版本的氣泡排序 雙迴圈。外層迴圈控制冒泡次數,內層迴圈實現每一輪的 冒泡處理 先進行元素比較,再進行元素交換。void ...