#include \main() { int i,j,k; int a[6]={9,8,5,4,2,0}; for(i=1;i<6;i++) { for(j=0;j<6-i;j++) { if(a[j]>a[j+1]) { k=a[j]; a[j]=a[j+1]; a[j+1]=k; } } } for(i=0;i<6;i++) { printf(\ } } 练习:编写程序,用冒泡法对字符串maritime排序(ASCII码小的在前面)
例题5:选择排序
【选择排序】
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最前,直到全部待排序的数据元素排完。 【示例】:
初始 [49 38 65 97 76 13 27 49] 第一趟排序后 13 [38 65 97 76 49 27 49] 第二趟排序后 13 27 [65 97 76 49 38 49] 第三趟排序后 13 27 38 [97 76 49 65 49] 第四趟排序后 13 27 38 49 [76 97 65 49 ] 第五趟排序后 13 27 38 49 49 [97 65 76] 第六趟排序后 13 27 38 49 49 65 [97 76] 第七趟排序后 13 27 38 49 49 65 76 [97]
最后排序结果 13 27 38 49 49 65 76 97
第一步:在[49 38 65 97 76 13 27 49]找到min
回顾范例1 使用另一种方法:记录最大值的下标t, #include \#include \ main() main() { { int i,min; int i,t; int a[8]={49,38,65,97,76,13,27,49}; int a[8]={49,38,65,97,76,13,27,49}; min=a[0]; t=0; /*用a[t]代表max*/ for(i=1;i<8;i++) for(i=1;i<8;i++) { { if(min>a[i]) if(a[t]>a[i]) { { min=a[i]; t=i; } } } } printf(\ printf(\a[t]); } printf(\ t); }
第二步:找到min后,将min与第一个位置的元素相交换
交换13与49,即交换a[t]与a[0],此时t=5。得到:13 [38 65 97 76 49 27 49]
#include \ main() { int i,t,temp; int a[8]={49,38,65,97,76,13,27,49}; t=0; for(i=1;i<8;i++) { if(a[t]>a[i]) { t=i; } } if(t!=0) /*如果原本a[o]就最小,那么就不用换*/ { temp=a[t]; a[t]=a[0]; a[0]=temp; } printf(\ }
最后,对于8个数:[49 38 65 97 76 13 27 49] ,总共进行了7趟排序,第1趟排序进行了7次两两比较,第i趟排序进行了8-i次两两比较 (此处i从1开始)
#include \ main() { int i,j,t,temp; int a[8]={49,38,65,97,76,13,27,49}; for(i=0;i<8;i++) { t=i; /*第i趟从第i个元素开始比较,i从0开始*/ for(j=i+1;j<8;j++) { if(a[t]>a[j]) { t=j; } } if(t!=i) /*将第i趟中最大值放在a[i]的位置*/ { temp=a[t]; a[t]=a[i]; a[i]=temp; } } for(i=0;i<8;i++) { printf(\ } }
练习:编写程序,用选择法对大小为10的数组按从大到小排序
附录 字符串的输入输出
(1)采用循环的方式读取字符串 #include \ main() { char a[15]; int i; printf(\请输入15个字符:\\n\ for (i=0;i<=14;i++) scanf(\ printf(\ printf(\您刚输入的15个字符:\ for (i=0;i<=14;i++) printf(\ }
我们发现:不输完15个字符就会一直等待你输入
(2)采用%s的方式读取字符串 #include \ main() { char c[15]; printf(\请输入15个以内的字符:\\n\ scanf(\ printf(\您刚输入的字符为:\\n\ printf(\ }
注意:%s读取时遇到空格就认为是结束标志!
(3)采用gets()的方式读取字符串 #include \ main() { char c[15]; printf(\请输入15个以内的字符:\\n\ gets(c); printf(\您刚输入的字符为:\\n\ puts(c); } 输入:I am a worker. 输出结果:I am a worker. 输入:I am a worker. 输出结果:I 输入:I am a worker. 输出结果:I am a worker.
说明:gets函数用来输入字符串,能够读取空格和回车符。puts函数用来输出的,输出时会自动在字符串末尾加一个换行符。