第一種方法: 採用排序,進行兩趟冒泡排序,當數據基本有序(升序)且不要求按照原有數據中的順序輸出時可選擇此方法 第二種方法: 輸出的數據按照原有數據中的順序排列 測試數據: 懶得輸入,就直接初始化了 註意:在第二次使用同一組數據時,需要重新輸入或者定義另一個數組賦初值,切不可直接使用,因為冒泡排序已 ...
第一種方法:
採用排序,進行兩趟冒泡排序,當數據基本有序(升序)且不要求按照原有數據中的順序輸出時可選擇此方法
1 void select_1(int a[],int length,int *min1,int *min2){
2 int i,j;
3 bool change = true;
4 for(i = 1;i <= 2 && change;i++){
5 change = false;
6 for(j = 0;j < length - i;j++){
7 if(a[j] > a[j+1]){
8 int temp;
9 temp = a[j];
10 a[j] = a[j+1];
11 a[j+1] = temp;
12 change = true; //如果交換,說明沒有排好序
13 }
14 }
15 }
16
17 *min1 = a[length - 2];
18 *min2 = a[length - 1];
19 }
第二種方法:
輸出的數據按照原有數據中的順序排列
1 void select_2(int *x1,int *x2,int x){
2 if(*x1 >= *x2){
3 if(x > *x2){
4 *x2 = x;
5 }
6 }
7 else{//x1 < x2
8 if(x >= *x2){
9 *x1 = *x2;
10 *x2 = x;
11 }
12 else if(x > *x1 && x < *x2){
13 *x1 = *x2;
14 *x2 = x;
15 }
16 }
17 }
測試數據:
懶得輸入,就直接初始化了
註意:在第二次使用同一組數據時,需要重新輸入或者定義另一個數組賦初值,切不可直接使用,因為冒泡排序已經改變了原有數據的順序,也不可使用 a[10] = {2,3,1,4,7,3,5,1,6,0}; 這樣的賦值語句,因為這種使用方式只有在初始化時可以這樣寫,在其他地方不可以,會出錯,出錯的原因是後面使用的不是初始化,並且a[10]表示一個值,而不是一組數,如果數組長度為10,a[10]是一個出界的數組值,也會導致出錯。
1 int main(){
2 int a[10] = {2,3,1,4,7,3,5,1,6,0};
3 int b[10] = {2,3,1,4,7,3,5,1,6,0};
4 int min1,min2;
5 select_1(a,10,&min1,&min2);
6 printf("不保證順序,只是找出最大和次大的值\n");
7 printf("min1: %d\nmin2: %d\n",min1,min2);
8
9 int i,j;
10 min1 = b[0];
11 min2 = b[1];
12 for(i = 2;i < 10;i++){
13 select_2(&min1,&min2,b[i]);
14 }
15 printf("大小保持原有順序不變\n");
16 printf("min1: %d\nmin2: %d\n",min1,min2);
17
18 return 0;
19 }
輸出結果截圖: