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;}
