选择排序思路:将乱序序列先变成局部有序,再逐渐变成完全有序
例如:
数组有10个数 6,2,4,7,5,8,9,10,3,1
我先找到这10个里最小的数 1
然后和第一个数交换变成 1,2,4,7,5,8,9,10,3,6
再找数组下标1-9中最小的数,是2
和下标为1的数交换(此处为不动)1,2,4,7,5,8,9,10,3,6
再找数组下标2-9中最小的数,是3
和下标为2的数交换(此处为不动)1,2,3,7,5,8,9,10,4,6
再找数组下标3-9中最小的数,是4
和下标为3的数交换(此处为不动)1,2,3,4,5,8,9,10,7,6
以此类推........
直到循环10次结束(循环9次也可以,最后一次就一个数了,也可以不处理)
源代码如下
#include <stdio.h>
void selectsort(int* p);
int main()
{
int a[10]={6,2,4,7,5,8,9,10,3,1};
selectsort(a);
for(int i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
void selectsort(int* p)
{
int flag;
int temp;
for(int i=0;i<9;i++)
{
flag=i;
for(int j=i;j<9;j++)
{
if(*(p+j+1)<*(p+flag))
{
flag=j+1;
}
}
temp=*(p+i);
*(p+i)=*(p+flag);
*(p+flag)=temp;
}
}