选择排序原理:
从待排序的元素中选出最小(大)的元素放在起始位置,然后再从剩余的元素中选出最小(大)的元素放在已排好的部分之后,直到只剩最后一个待排序的元素为止.
首先初始化最小元素索引值为首元素,依次遍历待排序数列,若遇到小于该最小索引位置处的元素,
则刷新最小索引为该较小元素的位置,直至遇到尾元素,结束一次遍历,并将最小索引处元素与首元素交换;
然后,初始化最小索引值为第二个待排序数列元素位置,同样的操作,可得到数列第二个元素即为次小元素;以此类推。
时间复杂度:O(N2) 稳定性:不稳定
#include <iostream>
#include <vector>
using namespace std;
void Print(vector<int> &arr)
{
for(int i = 0; i < arr.size(); i++){
cout << arr[i] << " ";
}
cout << endl;
}
void swap(int &a, int &b){
int tmp = a;
a = b;
b = tmp;
}
void selectSort(vector<int> &arr, int bgn, int end){
if(bgn >= end) return;
for(int i = bgn;i < end;++i){
int minIndex = i;
for(int j = i+1; j < end; ++j){
if(arr[minIndex] > arr[j]){
minIndex = j;
}
if(minIndex != i){
swap(arr[i], arr[minIndex]);
}
}
}
}
int main()
{
int a[9] = {5,6,4,2,3,9,8,7,1};
vector<int> arr(a,a+9);
Print(arr);
selectSort(arr,0,arr.size());
Print(arr);
}