C语言成长之路46:冒泡排序法求极值

声明:本笔记基于 B站UP主「来自程序员的暴击」的 「C语言成长之路」中对应课程;

参考理解:三分钟彻底理解冒泡排序


 

原理:从左到右依次使相邻的两个元素进行比较,将较大的元素放右边;

图解:

C语言成长之路46:冒泡排序法求极值

以上步骤完成了第一次,把极值放到最右边,到第二次循环的时候,又继续从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 }

 

上一篇:LeetCode 回溯篇(46、51)


下一篇:小谢第46问:js事件机制