資料結構 中的選擇 SelectSort 排序

2021-08-01 02:26:26 字數 1562 閱讀 7923

選擇排序(selection sort)是一種不穩定的排序方法,每一趟從待排序的

資料元素

中選出最小(或最大)的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。

其主要應用於計算機和數學領域。它的主要優點與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。

選擇排序每次交換一對元素,它們當中至少有乙個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。

在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。

選擇排序是給每個位置選擇當前元素最小的,比如給第乙個位置選擇最小的,在剩餘元素裡面給第二個元素選擇第二小的,依次類推,直到第n-1個元素,第n個元素不用選擇了,因為只剩下它乙個最大的元素了。那麼,在一趟選擇,如果乙個元素比當前元素小,而該小的元素又出現在乙個和當前元素相等的元素後面,那麼交換後穩定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9,我們知道第一遍選擇第1個元素5會和2交換,那麼原序列中2個5的相對前後順序就被破壞了,所以選擇排序不是乙個穩定的排序演算法。

排序例項

初始關鍵字 [49 38 65 97 76 13 27 49]

第一趟排序後 13 [38 65 97 76 49 27 49]

第二趟排序後 13 27 [65 97 76 49 38 49]

第三趟排序後 13 27 38 [97 76 49 65 49]

第四趟排序後 13 27 38 49 [76 97 65 49 ]

第五趟排序後 13 27 38 49 49 [97 65 76]

第六趟排序後 13 27 38 49 49 65 [97 76]

第七趟排序後 13 27 38 49 49 65 76 [97]

最後排序結果 13 27 38 49 49 65 76 97

選擇排序的**實現:

#includeusing namespace std;

#includevoid selectsort(int *a, size_t n)

if (a[i] > a[maxindex])

}swap(a[left], a[minindex]);

if (maxindex == left)

swap(a[right], a[maxindex]);

++left;

--right; }}

void printarray(int *a, size_t n)

cout << endl;

}int main()

; int arr = ;

int n = sizeof(arr) / sizeof(arr[0]);

selectsort(arr, n);

cout << "進行選擇排序後:";

printarray(arr, n);

system("pause");

return 0;

}

進行選擇排序後的結果如下:

資料結構 索引怎麼選擇合適的資料結構?

什麼是索引?模擬我們要查詢一本很厚的書時,怎麼快速定位到需要的部分 或者快速縮小查詢範圍 索引就類似於書中的目錄。業務的抽象落地就是資料是怎麼儲存 資料結構 怎麼根據儲存的資料結構獲取想要的資料 演算法 可能 反正我是 剛開始理解索引的時候是從資料庫索引開始的,其實只要像mysql資料庫內部那樣可以...

資料結構 選擇排序

選擇排序是一種比較直觀的排序方法 選擇排序的思想在於 預設公升序排序 在乙個陣列當中,選擇這個陣列當中最小的元素,將這個元素放在第一位,然後尋找第二小的元素,將這個元素放在第二位。以此類推,直到將這個陣列完成排序。這是乙個比較直觀的排序方法 選擇排序 演算法思想 在遍歷陣列的時候 找出陣列當中最小的...

資料結構 選擇排序

選擇排序 紅色表示當前最小值,黃色表示已排序序列,藍色表示當前位置。選擇排序就是按照從左往右,或者從右向左,依次選出乙個最大的或者最小的。例如 從左往右,依次選出最小的,放到最前面,依次選依次放,直到結尾。選擇排序 n len alist for j in range n 1 j產生0到n 2 mi...