#include <iostream>
using namespace std;
void print(int a[],int n,int i)
{
cout << "第"<<i+1<<"排序";
for(int j=0;j<n;j++)
{
cout <<a[j]<<" ";
}
cout <<endl;
}
//只选择最小值
void SelectionSort(int a[],int n)
{
for(int i=0;i<n-1;i++)
{
int min_value=a[i];
int min_index=i;
for(int j=i+1;j<n;j++)
{
if(a[j]<min_value)
{
min_value=a[j];
min_index=j;
}
}
if(min_index!=i)
{
int tmp=a[min_index];
a[min_index]=a[i];
a[i]=tmp;
}
print(a,n,i);
}
}
//同时选择最小值和最大值
void SelectionSortMinMax(int a[],int n)
{
for(int i=0;i<n/2;i++)
{
int min_index=i,max_index=n-i-1;
for(int j=i;j<n-i;j++)
{
if(a[j]>a[max_index])
{
//max_value=a[j];
max_index=j;
//continue;
}
if(a[j]<a[min_index])
{
//min_value=a[j];
min_index=j;
}
}
if(max_index!=n-i-1)
{
swap(a[max_index],a[n-i-1]);
}
if(min_index!=i && min_index!=n-i-1)//防止交换两次对称导致等效没有交换
{
swap(a[min_index],a[i]);
}
print(a,n,i);
}
}
int main()
{
//int a[8]={3,1,5,7,2,4,9,6};
int a[7]={3,1,5,7,2,4,9};
//int a[3]={5,4,3};
//SelectionSort(a,7);
SelectionSortMinMax(a,7);
return 0;
}
//<span style="font-family: Arial, Helvetica, sans-serif;">特别注意:防止交换两次对称导致等效没有交换,用例5,4,3</span>