简单选择排序的基本思想是每一趟在n-i+1(i=1,2,3...n-1)个记录中选取关键字最小的记录作为有序序列的第i个记录
稳定性:简单选择排序是不稳定排序
时间复杂度:最好 O(n^2) 最坏 O(n^2) 平均 O(n^2)
辅助空间:O(1)
给定排序要用到的swap函数:
void swap(int* a, int* b){ *a ^= *b; *b ^= *a; *a ^= *b; }
简单选择排序数组版:
/* 简单选择排序 --- 数组版 */ void SelectSort(int* L, int n){ int minn; for (int i = 0; i < n - 1; ++i){ minn = i; for (int j = i + 1; j < n; ++j){ if (L[j] < L[minn]){ minn = j; //记录最小值的下标 } }//for(j) //将最小值换位到无序区的最前面 if (minn != i){ swap(L + i, L + minn); } }//for(i) }
简单选择排序指针版:
/* 简单选择排序 --- 指针版 */ /* [head, tail)为左闭右开区间*/ void SelectSort(int* head, int* tail){ int* minn; for (int* p = head; p < tail - 1; ++p){ minn = p; for (int* q = p + 1; q < tail; ++q){ if (*q < *minn){ minn = q; //记录最小值的位置 } }//for(q) //将最小值换位到无序区的最前面 if (minn != p){ swap(minn, p); } }//for(p) }