#include <iostream>
#include <algorithm>
using namespace std;
void select(int a[], int len)
{
/*
1. 将第一个数的位置设为最小位置,然后将这个数与后面所有的数进行比较
2. 如果这个最小数大于后面的数, 则将后面这个值所在的位置设为最小位置
3. 再用这个新的最小位置的最小值向后比较,直到没有比最小值更小的
排序数组: 5 7 4 2 6
第一次排序:
min = 0 最小值:a[0] = 5
5(最小) 7 4 2 6
5 7 4(最小) 2 6 min = 2 比较:5<-->4
5 7 4 2(最小) 6 min = 3 比较:4<-->2
排序后:2 7 4 5 6
第二次排序:
min = 1 最小值:a[1] = 7
2 7(最小) 4 5 6
2 7 4(最小) 5 6 min = 2 比较:7<-->4
2 7 4(最小) 5 6 min = 3 比较:4<-->5
2 7 4(最小) 5 6 min = 4 比较:4<-->6
排序后:2 4 7 5 6
第三次排序:
min = 2 最小值:a[2] = 7
2 4 7(最小 5 6
2 4 7 5(最小) 6 min = 3 比较:7<-->5
2 4 7 5(最小) 6 min = 3 比较:5<-->6
排序后:2 4 5 7 6
第四次排序:
min = 3 最小值:a[3] = 7
2 4 5 7(最小) 6
2 4 5 7 6(最小) min = 4 比较:7<-->6
排序后:2 4 5 6 7
*/
for (int i=0; i<len; i++)
{
cout<<"第"<<i+1<<"次排序:"<<endl;
int min = i; //制定第一个位置为最小值
//循环依次向后比较
for (int j=i+1; j<len; j++)
{
cout<<"旧的最小值 a[min] = "<<a[min];
if (a[j]<a[min])//将后面的位置和最小值比较
min = j; //如果比最小值还小,则将新的位置设为最小位置
//用交换后的这个最小值,再与后面的值进行比较
cout<<", 新的最小值 a[min] = "<<a[min]<<endl;
cout<<"交换后的最小位置 min = "<<min<<endl;
}
swap(a[min], a[i]);//将最小值排到最前
//输出一轮排序后的结果
cout<<"第"<<i+1<<"次排序的结果:";
for (int x=0; x<len; x++)
{
cout<<a[x]<<" ";
}
cout<<endl<<endl;;
}
}
void show(int a[], int len)
{
for (int i=0; i<len; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
int main()
{
int a[5] = {5,7,4,2,6};
cout<<"选择排序:"<<endl;
cout<<"排序前:"<<endl;
show(a, 5);
cout<<endl;
select(a, 5);
cout<<endl;
cout<<"排序后:"<<endl;
show(a, 5);
return 0;
}
选择排序
最新推荐文章于 2024-09-02 10:55:27 发布