算法思路:先比较两个数的大小,先不交换,用临时变量记录最小值,直到遍历完数组后记录最小值,后面同理。
代码如下:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
//交换两个数值,引用传递
void swap(int &i, int &j)
{
int temp = i;
i = j;
j = temp;
}
//选择排序
void SelectSort(vector<int>&a)
{
for (int i = 0; i < a.size(); i++)
{
int min = i;//记录最小索引min
for (int j = i + 1; j < a.size(); j++)//开始寻找最小值的下标
{
if (a[j] < a[min])//若小于则改变min
{
min = j;
}
}
if (min != i)//若与初始索引值不符则交换两个值
{
swap(a[min], a[i]);
}
}
}
int main()
{
vector<int>a = { 9,3,6,7,8,1,2,5,4,0 };
cout << "排序前:" << endl;
//迭代器访问遍历
for (vector<int>::iterator i=a.begin();i!=a.end();i++)
{
cout << (*i) << " ";
}
cout << endl;
cout << "排序后:" << endl;
SelectSort(a);
for (auto x:a)//把a中的值一个一个赋值给x
{
cout << x <<" ";
}
cout << endl;
system("pause");
return 0;
}