vlambda博客
学习文章列表

C语言 — 选择排序法

排序原理:
1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引
2.交换第一个索引处和最小值所在的索引处的值


代码示例:

#include<stdio.h>#define N 7int 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;}