【資料結構】選擇排序
阿新 • • 發佈:2018-11-17
- 概念:
每次從待排序的陣列元素中,選出最小或最大的,存放在序列的起始位置,直到全部待排序的陣列元素排完。
- 核心思想:
如果有n個元素需要排序,首先從n個元素中找到最小的那個元素,並與第0個位置上的元素交換,最大的那個元素與最後一個位置上的數交換(說明一點,如果沒有比第0位置上的元素小的就不用交換了,大的也一樣);然後再從剩下的n-1個元素中找到最小的元素與第1個位置上的元素交換,找到最大的元素與倒數第二個位置上的數交換;之後依次類推,直到所有元素都排序好。
- 具體程式碼如下:
void SelectSort(int* a, int n)//選擇排序 { assert(a); int begin = 0; int end = n - 1; int max = 0; int min = 0; int i = 0; while (begin < end) { min = begin; max = begin; for (i = begin; i <= end; i++) { if (a[i] >=a[max]) { max = i; } if (a[i] <= a[min]) { min = i; } } if (a[begin] != a[min]) { Swap(&a[begin], &a[min]); } if (a[begin] == a[max]) { max = min; } Swap(&a[end], &a[max]); begin++; end--; } }
- 總結:
1.直接選擇排序好理解,但是效率不是很好。實際中很少使用
2.時間複雜度: O(N^2)
3.空間複雜度: O(1)
4.穩定性:不穩定(可以調整為穩定的)