#include<stdio.h>
void SelectionSort(int *num,int n)
{
int i = 0;
int min = 0;
int j = 0;
int tmp = 0;
for(i = 0;i < n-1;i++)
{
min = i;//每次讲min置成无序组起始位置元素下标
for(j = i;j < n;j++)//遍历无序组,找到最小元素。
{
if(num[min]>num[j])
{
min = j;
}
}
if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置
{
tmp = num[min];
num[min] = num[i];
num[i] = tmp;
}
}
}
int main()
{
int num[] = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
int i = 0;
int length = sizeof(num)/sizeof(int);
SelectionSort(num,length);//这里需要将数列元素个数传入。有心者可用sizeof在函数内求得元素个数。
for(i = 0;i < length;i++)
{
printf("%d ",num[i]);
}
return 0;
}
更好理解的代码
#include <iostream>
using namespace std;
int find_max_Pos(int a[],int n)
{
int pos=0;
int max = a[0];
for(int i=0;i<n;i++)
{
if(a[i]>max)
{
max = a[i];
pos = i;
}
}
return pos
}
void selectSort(int a[],int n)
{
while(n>1)
{
int pos = find_max_Pos(a,n);
int tmp = a[pos];
a[pos] = a[n-1];
a[n-1] = tmp;
n--;
}
}
int main() {
int a[] = {5,3,2,7,6,1};
//cout<<find_max_Pos(a,6);
//cout<<endl;
selectSort(a,6);
for(int i=0;i<6;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}