工作原理
每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在待排序列的起始位置,待排序序列长度减一;以此类推,直到全部待排序的数据元素的个数为零(待排序序列长度为0)。
动图演示
静态图解
int ar[10]={32,12,45,79,65,23,45,89,100,60}; //对此数组分析
单次排序算法代码如下:
int pos= i; //待排序序列首元素下标
for(int j=pos+1;j<len;j++) // len为数组长度
{
if( ar[j] < ar[pos] )
{
pos=j; //保存最小元素下标
}
}
Swap(&ar[i],&ar[pos]); //交换
共需进行n轮排序,数组即可有序
总体代码如下:
#include<stdio.h>
#include<assert.h>
void Swap(int *a,int* b)
{
assert(NULL!=a && NULL!= b);
int tem=*a;
*a=*b;
*b= tem;
}
void SelectSort(int *ar,int len)
{
for(int i=0;i<len;i++)
{
int pos= i;//待排序序列首元素下标
for(int j=pos+1;j<len;j++) // len为数组长度
{
if(ar[j]<ar[pos])
{
pos=j;
}
}
if(pos!= i)
{
Swap(&ar[i],&ar[pos]); //交换
}
}
}
int main()
{
int ar[10]={32,12,45,79,65,23,45,89,100,60};
int len = sizeof(ar)/sizeof(ar[0]);
SelectSort(ar,len);
for(int i=0;i<len;i++)
{
printf("%d ",ar[i]);
}
return 0;
}