每趟选择一个最大的元素(或最小的元素)与数组前面的元素交换
只需记录其下标就好

#include <stdio.h>
void selectionSort(int arr[],int len)
{
int i,j,temp,index;
for(i=0;i<len-1;i++)
{
index=i;
for(j=i;j<len-1;j++)
{
if(arr[index]<arr[j+1]) //也可以大于来判断
{
index=j+1;
}
}
if(index!=i)
{
temp=arr[index];
arr[index]=arr[i];
arr[i]=temp;
}
}
}
void main()
{
int arr[]={1,2,3,4,9,8,7,6,5,0};
int len = (int)sizeof(arr)/sizeof(*arr);
printf("The order after sorting is:\n");
selectionSort(arr,len);
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
}
网友评论