資料結構與演算法複習 一 排序演算法

2021-10-04 06:17:03 字數 2354 閱讀 4827

這篇文章將會介紹常見的排序演算法(使用 c++ 實現)

將陣列分為有序區(左邊)和無序區(右邊),在初始化時有序區為空,無序區包含陣列所有元素

每次從無序區的最後乙個元素開始,一直向前冒泡到無序區的第乙個位置,使其變成有序

templatevoid swap(e a, int i, int j) 

templatevoid bubblesort(e a, int n) }}

}

將陣列分為有序區(左邊)和無序區(右邊),在初始化時有序區為空,無序區包含陣列所有元素

每次從無序區中選擇乙個合適的元素,並將其交換到無序區的第乙個位置,使其變成有序

templatevoid swap(e a, int i, int j) 

templatevoid selectionsort(e a, int n)

swap(a, i, minidx);

}}

將陣列分為有序區(左邊)和無序區(右邊),在初始化時有序區包含陣列的第乙個元素,無序區包含其餘的元素

每次將無序區中的第乙個元素,一直向前交換到有序區中的合適位置,使其變成有序

templatevoid swap(e a, int i, int j) 

templatevoid insertionsort(e a, int n)

}}}

遞迴進行,每次將陣列一分為二,然後對兩個陣列分別排序後,合併兩個陣列

templatevoid mergesort(e a, e t, int l, int r) 

}

優化:臨時陣列後半部分反向插入,這樣可以不用檢測邊界情況

templatevoid mergesort(e a, e t, int l, int r) 

}

遞迴進行,每次在陣列中選擇乙個基準,根據基準將陣列一分為二,然後對兩個陣列分別排序後,拼接兩個陣列

templatevoid swap(e a, int i, int j) 

templatevoid quicksort(e a, int l, int r)

while (i < j && pivot < a[--j]) {}

swap(a, i, j);

} while (i < j);

// put pivot in place

swap(a, r, i);

// recursive

quicksort(a, l, i - 1);

quicksort(a, i + 1, r);

}

優化:使用棧替代遞迴

templatevoid swap(e a, int i, int j) 

templatevoid quicksort(e a, int l, int r)

while (i < j && pivot < a[--j]) {}

swap(a, i, j);

} while (i < j);

// undo the last swap

swap(a, i, j);

// put pivot in place

swap(a, r, i);

// load up stack

if (i - 1 > l)

if (r > i + 1)

}}

測試程式

#include #include using namespace std;

int main()

測試結果

資料規模

1000

10000

100000

1000000

10000000

100000000

bubble sort

0.003 s

0.355 s

41.414 s//

/selection sort

0.001 s

0.123 s

12.151 s//

/insertion sort

0.002 s

0.224 s

22.881 s//

/merge sort

0 s0.002 s

0.021 s

0.212 s

2.285 s

24.352 s

quick sort

0 s0.002 s

0.017 s

0.175 s

1.826 s

19.498 s

資料結構系列 一 排序演算法

1.2 插入排序 1.3 選擇排序 1.4 歸併排序 1.5 堆排序 1.6 快速排序 基於資料狀況的排序演算法 1.7桶排序 1.8 小結 穩定排序 相對次序並沒有改變 void bubblesortv1 int a,int n 實現 增加乙個sorted標誌,對於有序陣列則不再進行比較判斷。複雜...

資料結構複習筆記(一) 排序

資料結構複習筆記 一 這是我的第一天的學習日記 今天主要學的是排序,這裡我們就簡單的講一下幾種常見的排序 先來看排序的輸入輸出 給定乙個任意無序定長陣列num 10 通過 處理後陣列將變成 看似簡單的過程 可以有很多種處理的方法 先看看第一種排序 這種排序演算法的思路就是 將下乙個需要排的元素插入到...

演算法(一)排序

一 o n 2 的排序演算法 1.選擇排序 selection sort 先找到最小的 public static void selectsort int arr 2.氣泡排序 bubble sort 先找到最大的 public static void bubblesort int arr 3.插入...