例64冒泡法排序(从小到大)。 以6个数:3、7、5、6、8、0为例。 j=2 j=3 j=4 j=5 a|0 a 如果a[]>a[|1] a2]6 a[i]与a[+1]交换 单击继续) a3 as 2021/2/24
2021/2/24 1 3 7 5 6 8 0 3 7 5 6 8 0 3 5 7 6 8 0 3 5 6 7 8 0 3 5 6 7 8 0 3 5 6 7 0 8 a[0] a[1] a[2] a[3] a[4] a[5] j=2 3 5 6 7 0 8 3 5 6 7 0 8 3 5 6 7 0 8 3 5 6 7 0 8 3 5 6 0 7 8 j=3 3 5 6 0 7 8 3 5 6 0 7 8 3 5 6 0 7 8 3 5 0 6 7 8 j=1 j=4 3 5 0 6 7 8 3 5 0 6 7 8 3 0 5 6 7 8 j=5 3 0 5 6 7 8 0 3 5 6 7 8 【例6.4】冒泡法排序(从小到大)。 如果 a[ i ] > a[ i+1 ] a[ i ] 与 a[ i+1 ]交换 (单击继续…) 以6个数:3、7、5、6、8、0为例
冒泡法排序(续) j=2 j=3 j=4 j=5 a|0 控制比较的趟数(外层循环) a for(=1;j<N;j++) a2] a3]控制两两比较的次数(内层循环) for (i0; i< N-i; i++) as 2021/2/24
2021/2/24 2 冒泡法排序 (续) 3 5 6 7 0 8 a[0] a[1] a[2] a[3] a[4] a[5] j=2 3 5 6 0 7 8 j=3 3 5 0 6 7 8 j=1 j=4 3 0 5 6 7 8 j=5 0 3 5 6 7 8 j 控制比较的趟数(外层循环): for(j=1;j< ;j++) i 控制两两比较的次数(内层循环): for (i=0; i< ; i++) N N-j
冒泡法排序(续) 从上述过程可以看到:n个数要比较n-1趟,而 在第j趟比较中,要进行n-j次两两比较。 for(i=0; i<N; i++) 输入a for〔=1;j<N;j++) for (i=0; K<N-j; 1++) ai>ai+1 F a与a[计1交换 输出a[0-aN-1l 冒泡法排序 2021/2/24
2021/2/24 3 冒泡法排序 (续) 从上述过程可以看到:n个数要比较n-1趟,而 在第j趟比较中,要进行n-j次两两比较。 冒泡法排序 for (i=0; i<N; i++) 输入a[i] for (j=1;j<N; j++) for (i=0; i<N-j; i++) a[i]>a[i+1] T F a[i]与a[i+1]交换 输出a[0]~a[N-1]
#definen 6 maino f int a ni 程序运行情况如下: int i,j,t; 3756804 for (i=0; i<N; i++) 035678 scanf(%od", &aiD for(j=1;j=N-1;j++)/控制比较的趟数 for(i=0;i<N-j;i++)/两两比较的次数 if(ai> i+lD itaiiall=ai+l;ai+1=t;3 printf("The sorted numbers: n);
2021/2/24 4 #define N 6 main( ) { int a[N]; int i,j,t; for (i=0; i<N; i++) scanf("%d",&a[i]); for (j=1; j<=N-1; j++) /*控制比较的趟数 */ for (i=0; i<N-j; i++) /*两两比较的次数 */ if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; } printf("The sorted numbers: \n"); 。。。 } 程序运行情况如下: 3 7 5 6 8 0 0 3 5 6 7 8
例65选择法序排序(从小到大)。6 以6个数:3、7、5、6、8、0为例。 思蹄: 第一趟:将第一个数依次和后面的数比较,如 果后面的某数小于第一个数,则两个数交换,比较 结束后,第一个数则是最小的数。 第二趟:将第二个数依次和后面的数比较,如 果后面的某数小于第二个数,则两个数交换,比较 结束后,第二个数则是次小的数; 2021/2/24
2021/2/24 5 以6个数:3、7、5、6、8、0为例。 思路: 第一趟:将第一个数依次和后面的数比较,如 果后面的某数小于第一个数,则两个数交换,比较 结束后,第一个数则是最小的数。 第二趟:将第二个数依次和后面的数比较,如 果后面的某数小于第二个数,则两个数交换,比较 结束后,第二个数则是次小的数;…… 。 【例6.5】选择法序排序(从小到大)