C语言成长之路46:冒泡排序法求极值
声明:本笔记基于 B站UP主「来自程序员的暴击」的 「C语言成长之路」中对应课程;
参考理解:三分钟彻底理解冒泡排序
原理:从左到右依次使相邻的两个元素进行比较,将较大的元素放右边;
图解:
以上步骤完成了第一次,把极值放到最右边,到第二次循环的时候,又继续从a[0]开始重复上面的步骤,最终获得[0, 1, 2, 3, 4, 5]
求最大值代码:
1 void bubbleSort(){ 2 /* 冒泡排序法求最大值 */ 3 printf("please enter 10 num to test \n"); 4 int a[10]; 5 for (int i = 0;i < 10;i++){ 6 scanf("%d",&a[i]); // 循环获取用户输入 7 } 8 for (int i = 0;i < 10 - 1;i++){ 9 if(a[i] > a[i + 1]){ // 比较相邻的两个元素,把值更大的元素交换到后面 10 int temp = a[i + 1]; // 选择排序法是先设一个标杆,跟标杆去比较 11 a[i + 1] = a[i]; // 而冒泡排序法则是通过列表中两两进行比较,每次比出最大的一个,如此循环,获得最大(小)的值 12 a[i] = temp; 13 } 14 } 15 printf("a[9] = %d",a[9]); // 因为这次是求最大值,所以最后一个元素必定是最大的 16 }
求最小值代码:
1 void bubbleSort2(){ 2 /* 冒泡排序法求最小值 */ 3 printf("please enter 10 num to test \n"); 4 int a[10]; 5 for (int i =0;i < 10;i++){ 6 scanf("%d",&a[i]); 7 } 8 for (int i = 0;i < 10-1;i++){ 9 if(a[i] < a[i + 1]){ 10 int temp = a[i + 1]; 11 a[i + 1] = a[i]; 12 a[i] = temp; 13 } 14 } 15 printf("a[9] = %d",a[9]); 16 }