C语言成长之路45:选择排序法(下)

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


 

本节补充第44节课的选择排序法,使用第二种方法去写;

代码:

 1 void selectionSor2(){
 2     /*  C语言成长之路45:选择排序法(下)  */
 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     int kmax = 0;                       //  创建一个变量,用于准备存储数组下标
 9 
10     for (int i = 0;i < 10 - 1;i++){
11         kmax = i;
12         for (int j = i + 1;j < 10;j++){
13             if (a[kmax] < a[j]){        //  比较两者下标所表示的值的大小,如果下标为kmax的值小于下标为j的值;
14                 kmax = j;               //  则记录更大的值所对应的数组下标
15             }
16         }
17         if (kmax != i){                 //  在上面的代码中,已经是获得了一个最大的值对应的下标,接下来进行一次位置的交换即可
18             int temp_num = a[i];        //  这里只比较,并做赋值,而没有进行内存的交换,内存的交换是非常耗费时间的
19             a[i] = a[kmax];             //  上一节课的是每一次小循环都进行一次内存的交换
20             a[kmax] = temp_num;         //  本节课的代码大循环一次,交换一次内存,相比之下,效率会高更多
21         }
22     }
23     for (int i = 0;i < 10;i++){
24         printf("a[%d] = %d\n",i,a[i]);
25     }
26 }

 

posted @ 2020-08-08 12:17  Akne  阅读(89)  评论(0编辑  收藏  举报