概念
選擇排序(selection sort):一種簡(jiǎn)單直觀的排序算法。
原理
每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。
處理流程
- 從待排序序列中,找到關(guān)鍵字最小的元素;
- 如果最小元素不是待排序序列的第一個(gè)元素,將其和第一個(gè)元素互換;
- 從余下的 N - 1 個(gè)元素中,找出關(guān)鍵字最小的元素,重復(fù)(1)、(2)步,直到排序結(jié)束。
圖片.png
算法描述(C語(yǔ)言)
void selection_sort(int *a, int len) {
int temp, min_index;
for (int i = 0; i < len; i++) {
min_index = i;
for (int j = i + 1; j < len; j++) {
if (a[j] < a[min_index]) {
min_index = j;
}
}
if (i != min_index) {
temp = a[i];
a[i] = a[min_index];
a[min_index] = temp;
}
}
}
int main() {
int a[] = {9, 1, 2, 5, 7, 4, 8, 6, 3, 5};
int len = sizeof(a)/sizeof(int);
selection_sort(a, len);
for (int i = 0; i < len; i++) {
printf("%d\n", a[i]);
}
return 0;
}
算法穩(wěn)定性
選擇排序兩個(gè)相同的元素排序結(jié)束后位置可能發(fā)生變化,所以選擇排序是不穩(wěn)定的排序算法。
算法分析
時(shí)間復(fù)雜度:O(n2)