例用冒泡法对10个数排序 排序过程: (1)比较第一个数与第二个数,若为逆序a[]>a],则交换;然 后比较第二个数与第三个数;依次类推,直至第n-1个数和第 n个数比较为止——第一趟冒泡排序,结果最大的数被安置在 最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在 第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束
例 用冒泡法对10个数排序 排序过程: (1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然 后比较第二个数与第三个数;依次类推,直至第n-1个数和第 n个数比较为止——第一趟冒泡排序,结果最大的数被安置在 最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在 第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束
例日1初始:图65圆6国27D7 八 趟:B84965国276 97 趟:[3849651327]7697 若有n个数排序须进行n-1轮比较,在j 三趟: 轮比较时须进行n次两两比较 四趟:[381327]49657697 五趟:[1327]3849657697 六趟:[13]273849657697
例 i=1 初始: [ 49 38 65 97 76 13 27 ] 38 i=2 一趟: [38 49 65 76 13 27 ] 76 97 二趟: [38 49 65 13 27 ] 76 97 三趟: [38 49 13 27 ] 65 76 97 四趟: [38 13 27 ] 49 65 76 97 五趟: [13 27 ] 38 49 65 76 97 六趟: [13 ] 27 38 49 65 76 97 49 76 1397 972 97 13 27 76 若有n个数排序,须进行n-1轮比较,在j 轮比较时,须进行n-j次两两比较
用冒泡法对数组元素进行升序排序程序1 main( I int a[10] inti,i, t; printf(Input 10 numbers:n");为数组元素赋值 for(i=0;<10;|++) scanf( %d",&a[) printf( In"); 外循环控制比较轮数 for(=1j<=9j++) 内循环控制每轮比较次数 for(i=0;<=10-1;i++ 相邻两个元素进行比较 if(a[isa[+11) =a;a[=a[i+1];a+1t 如果后一个元素比前 个元素小,二者交换 printf( the sorted numbers In"); for(i=0;<10;++) 输出排序后的数组 printf( %d ",a[D
用冒泡法对数组元素进行升序排序程序1 main( ) { int a[10]; int i,j,t; printf(“Input 10 numbers :\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(j=1;j<=9;j++) for(i=0;i<=10-j-1;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("the sorted numbers : \n"); for(i=0;i<10;i++) printf("%d ",a[i]); } 为数组元素赋值 外循环控制比较轮数 内循环控制每轮比较次数 相邻两个元素进行比较 如果后一个元素比前 一个元素小,二者交换 输出排序后的数组 运行程序 Ch6_5.c
冒泡法排序的核心程序分析 外循环变量保证执行n-1=9次,进行9轮比较 内循环变量的终值的确定方法是 在第一轮比较时,|+1的最大值是数组中最后一个元 素的下标,同时随j的增加而减少 即当j=时,i终值应是8+1应当为9 for(=1j<=9;j++) for(=;k<=10-1;1+) if(a[a[i+1]) 仁a:a=a[+1;a[i+1]=t 内循环变量的初值是数组中最前边一个元素的下标
冒泡法排序的核心程序分析 for(j=1;j<=9;j++) for(i=0;i<=10-j-1;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} 外循环变量保证执行n-1=9次,进行9轮比较 内循环变量的初值是数组中最前边一个元素的下标 内循环变量的终值的确定方法是: 在第一轮比较时,i+1的最大值是数组中最后一个元 素的下标,同时i应随j的增加而减少。 即当j=1时,i的终值应是8,i+1应当为9
用冒泡法对数组元素进行升序排序程序2 main() I int a[11] int i,i, t; printf(Input 10 numbers In"); 数组元素a[0未赋值,在整 个程序中不使用该元素 for(i=1;k<11;i+) scanf(%od", &a0) 外循环控制比较轮数 printf(In) 内循环变量的终值: for(=1j<=9j++) for(1;=10;++) 当j1时,1的最大值是 if(a[sa[i+1]) 数组中最后一个元素的下 =a;a[=a[i+1];a+1t;} 标,同时应随的增加而减 少。即当=1时,i最大值 printf( the sorted numbers:n")应是91应当为10 for(i=1;<11;i++) printf("%d , a[ 内循环变量的初值是数组中最前边一个元素的下标
用冒泡法对数组元素进行升序排序程序2 main( ) { int a[11]; int i,j,t; printf(“Input 10 numbers :\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); for(j=1;j<=9;j++) for(i=1;i<=10-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"); for(i=1;i<11;i++) printf("%d ",a[i]); } 数组元素a[0]未赋值,在整 个程序中不使用该元素 内循环变量的初值是数组中最前边一个元素的下标 内循环变量的终值: 当j=1时,i+1的最大值是 数组中最后一个元素的下 标,同时i应随j的增加而减 少。即当j=1时,i的最大值 应是9,i+1应当为10 外循环控制比较轮数 运行程序 Ch6_6.c