冒泡排序法:
冒泡排序是程序语言经典算法,用了N次来理解整个过程,现在能自己写出来了。原理就是 两两比较,小的靠右,从前往后,从后往前。共循环N-1次,每次比较当前位置次,每次两个比较使较大数后移位置。以下是思维图解:
代码如下:
#include int main() { int i,u,z[4],e; for(i=0;i<=3;i++) { scanf("%d",&z[i]); } for(i=0;i<=3;i++) for(u=0;u<=3-i;u++) { if(z[u]>=z[u+1]) { e=z[u]; z[u]=z[u+1]; z[u+1]=e; } } for(i=0;i<=3;i++) printf("%d",z[i]); return 0; }
选择排序法:
基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。思维图解及代码如下:
#include<stdio.h> int main() { int i,u,z[4],e,k; for(i=0;i<=3;i++) { scanf("%d",&z[i]); } for(i=0;i<=3;i++) {u=i; for(e=i+1;e<=3;e++) { if(z[e]>z[u]) { k=z[e]; z[e]=z[u]; z[u]=k; } } } for(i=0;i<=3;i++) { printf("%d",z[i]); } return 0; }
后记:
必须要承认搞不好真的能混掉,我敲了一遍,冒泡法的精髓是通过一个for循环对比前后两个,将其排序,然后通过++,使其比较位置后移一位,能够将最大的数沉底。替换法在于从a【0】处开始比较出比a【0】大的替换掉a【0】,继续后移发现比a【0】大的替换a【0】,整个子过程中a【0】一直代表本次小循环中的最大值。 两种方法的相同点是第一个for循环均是用来控制执行的次数。