问题说明:
给出数组或输入数组,分别采用选择排序法和冒泡排序法输出所需结果。
程序分析:
选择排序
1 .关于选择排序,首先要了解排序的思想。 给出数组的想法首先假定数组的第一个元素是最大(最小)。 此时,使用3个变量I、j、k表示要素的下标。 I当前表示找到的最大(最小)下标,而k用于在每个循环中存储最大值的下标。
2 .掌握程序的基本思路后,再进行排名。 找到最大的下标并将其分配给k。 然后,判断假设的当前值是否是本次循环的最大值,否则,交换a[k]和当前的a[i]的值,按照一定的顺序排列数组,最后写循环并输出结果。
泡沫排序
1 .关于鼓泡序列化,主要采用相邻数各两比较的思想。 如果后者大于(小于)前面,则替换位置,直到比较了所有数量。
2 .如果给定大小为n的数组,则需要比较n-1次。 每次比较n-1-i次。 I表示在上次循环中经过比较的下标。 写两个循环判断,需要交换就进行交换,不需要交换就进行以下两个数的比较,直到所有数都比较。 最后,在一个周期内输出所有排序完成的数量。
步骤如下。
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。 定义//j,赋值为0,j为找到最大值时相应的下标int k; //定义k以存储此循环中最大下标int temp; //以后交换值时inta [ ]={ 4,5,6,72,1,7,9,3,};//定义9个数组,初始化intlen=sizeof(a )/sizeof (a [0] )//len是数组的大小for(I=0; ilen; 判断I//I是否小于len,以下语句{k=i; //本次循环中的最大值为当前值for(j=I1; Jen; j () if ) a[j]a[k] ) /比较假设的当前最大值和后续值) k=j; //如果后的值更大,则更换下标},当前的最大值if(k!=i )//比较后,在本次周期中最大值不是当前值的情况下({ temp=a[i]; //将本次循环中的最大值更换为a[k]的a[i]=a[k]; a[k]=temp; }for(I=0; ilen; I )利用//for循环依次输出结果(printf )、a[i] ); }返回0; ()/(() () ) ) () ) ) ) ) ) ) ) ) (() ) ) ) ) int j=0; int temp; inta [ 10 ]={ 9,8,7,6,5,4,3,2,1,0 }; intlen=sizeof(a )/sizeof ) a[0]; for(I=0; ilen-1; I ) for(j=0; j len-1-i; j () if ) a[j1]a[j] ) {temp=a[j 1]; a[j 1]=a[j]; a[j]=temp; I; }}for(I=0; ilen; I ) {printf(‘%d ‘,a[i] ); }返回0; () /