上课学的选择法数组排序,老师讲的云里雾里的,准备用自己的理解再写一下它的原理及注意点,希望对你有所帮助
目录
1.原理
2.注意点
3.代码
1.原理
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完
通俗来说,就是从数组中第一个元素开始,依次检测它后面的元素(如果检测到比它大(或小)的就换值),检测完第一个元素,就检测第二个,以此类推
2.注意点
选择法排序总共需要2个for循环
第一个for循环:
假设数组中有N个元素,给这个数组中元素排序需要将它切N-1刀检测;后移时for循环
第二个for循环:
检测位移后的每个数,与每刀前的一个数比较,判断是否需要换值
3.代码
#include <stdio.h>
#define N 6
int main()
{
int i,j,a[N],t;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
/*假设数组中有N个元素,给这个数组中元素排序需要将它切N-1刀检测*/
for(i=0;i<N-1;i++)
for(j=i;j<=N-1;j++)//检测位移后的每个数,与每刀前的一个数比较,判断是否需要换值
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<N;i++)
printf("%d",a[i]);
}
升级:每次全部检测完,再换值;而不是检测到就换;提高程序运行效率
#include <stdio.h>
#define N 6
int main()
{
int i,j,a[N],t,min;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)//假设数组中有N个元素,给这个数组中元素排序需要将它切N-1刀检测
{
min=i;
for(j=i+1;j<=N-1;j++)//检测位移后的每个数,与每刀前的一个数比较,判断是否需要换值
if(a[min]>a[j])
min=j;
if(min!=i)
{
t=a[i];
a[i]=a[min];
a[min]=t;
}
}
for(i=0;i<N;i++)
printf("%d",a[i]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)