C语言 — 选择排序法
Posted Dog软件工程师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 — 选择排序法相关的知识,希望对你有一定的参考价值。
排序原理:
1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引
2.交换第一个索引处和最小值所在的索引处的值
代码示例:
int main(int argc,char* argv[])
{
int i,j,x[N],min,temp;
//i,j→用于循环和数组下标、min→标记最小值,temp→交换两数的中间变量
printf("请输入7个数字:\n");
for(i=0;i<N;i++)
scanf("%d",&x[i]);
for(i=0;i<N-1;i++) //控制趟次
{
min=i; /*假设初始下标i就为最小值,那么下面一层的循环应从下一个数与它就行比较,而不应该再是自己比自己
那样是毫无意义的,∴ j=i+1 */
for(j=i+1;j<N;j++)
{
/*放入到全部数据里面去比大小,当比完第一趟以后第一个数
就一定是这个数组中的最大或者最小值,此时就无需再关顾第一个数
而应该是继续排序剩下来的所有数字,∴ j<N */
//如果有比min这个下标数组的值还要小的数,就标记住这个数,继续参与比较,这么下来,min标记的一定是最小值
if(x[min]>x[j])
min=j;
}
if(min!=i) /*说不定这个数从一开始就是一个有序的数,所以,判断如果min的下标从未发生过改变,那么说明这个数
排序后就肯定还是在原来的位置,那么此时无需再交换两数,保持这个位置就好 */
{
temp=x[min];
x[min]=x[i];
x[i]=temp;
}
}
printf("按从小到大排序为:\n");
for(i=0;i<N;i++)
printf("%d ",x[i]);
printf("\n");
return 0;
}
以上是关于C语言 — 选择排序法的主要内容,如果未能解决你的问题,请参考以下文章
c语言冒泡排序法代码一直排序错误,有时只能排前两个,不明白原因,请问究竟哪里写错了,谢谢!