1. 程式人生 > 其它 >資料結構 經典排序演算法總結(二)

資料結構 經典排序演算法總結(二)

技術標籤:資料結構排序演算法快速排序資料結構演算法

資料結構 經典排序演算法總結(二)

交換排序

氣泡排序

氣泡排序:是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。
思想:對所有相鄰記錄的關鍵字值進行比效,如果是逆順(a[j]>a[j+1]),則將其交換,最終達到有序化;
適用情況:資料量少且不考慮效率
時間複雜度和穩定性:O(n)~O(n2) 穩定

1、比較相鄰的元素。如果第一個比第二個大,就交換它們兩個;
2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;
3、針對所有的元素重複以上的步驟,除了最後一個;
4、重複步驟1~3,直到排序完成。
在這裡插入圖片描述
程式碼實現:(優化兩次後的氣泡排序)

void BubbleSort(int* arr, int size)
{
	int n = size - 1;
	//用於記錄每輪冒泡最後交換的位置,優化。
	int pos = 0;

	for (int i = 0; i < size; ++i)
	{
		//用於標記該輪冒泡是否有資料交換 優化
		bool flag =
false; for (int j = 0; j < n; ++j) { if (arr[j] > arr[j + 1]) { Swap(arr, j, j + 1); flag = true; //最後一次交換位置,下輪冒泡時後面就不用遍歷了。 pos = j; } } if (flag != true) { //元素未交換,說明已有序,退出 break; } n = pos; } }

執行結果:
在這裡插入圖片描述

快速排序(重要)

由於篇幅和重要性的問題,博主將快速排序單獨寫在一篇部落格中 資料結構 快速排序的三種實現 (hoare版本 挖坑法 前後指標版本)