选择排序
选择排序
1. 依次选择第(1,2,......,n-1)为最小值,依次比较后面的值,知道遇到最小值两者调换
#include<stdio.h>
void choose(int *a,int n)
{
int i,j,min,index; //取最小值min,最小值的下标index
for(i=0;i<n-1;i++) //有n个数則进行n-1次排序
{
min = a[i]; //依次选择a[0,1,.....,n-1]为最小值
index = i; //最小值下标
for(j=i+1;j<n;j++) //选择a[0]为最小值,只需要比较a[0]后面的值,所以 j 从i+1开始比较
{
if(min > a[j])
{
min = a[j]; //碰到比min小的数,将其赋值给min,同时保存下标,知道找到最小值
index = j;
}
}
if(i!=index) //判断最小值是不是在原来的位置,如果在原来的位置,就不用调换数值了
{
a[index] = a[i];
a[i] = min;
}
}
}
int main(int argc, const char *argv[])
{
int a[] = {67,55,37,86,65,36,88,54,6,24};
choose(a,10);
int i;
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}
---恢复内容结束---
#include<stdio.h>
void choose(int *a,int n)
{
int i,j,min,index;
for(i=0;i<n-1;i++) //有n个数則进行n-1次排序
{
min = a[i];
index = i;
for(j=i+1;j<n;j++)
{
if(min > a[j])
{
min = a[j];
index = j;
}
}
if(i!=index)
{
a[index] = a[i];
a[i] = min;
}
}
}
int main(int argc, const char *argv[])
{
int a[] = {67,55,37,86,65,36,88,54,6,24};
choose(a,10);
int i;
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}