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 }