求N個數的數組中第K大的數的值


方法一:將這N個數的數組,通過簡單的冒泡排序法,以遞減的順序將數組排序,然后返回第K個元素。

 

方法二:先把前K個元素拷貝到數組b,以遞減的順序對其排序,然后,將剩下的元素逐個與數組b比較,

如果小於數組b中的第K個元素則忽略,否則將新元素放到數組b中正確的位置上,同時將數組b中的一個

元素擠出數組。當算法終止時,返回數組b中第K個元素。

代碼實現:

 1 #define K 4
 2 #define N 15
 3 
 4 ...
 5 
 6     //輸入N個數
 7     printf("N numbers:\n");
 8     int a[N];
 9     for (int i = 0; i < N; i++)
10     {
11         scanf("%d", a + i);
12     }
13 
14     //取前k個元素
15     int b[K];
16     for (int i = 0; i < K; i++)
17     {
18         b[i] = a[i];
19     }
20 
21     //前k個元素降序排序
22     for (int i = K; i > 0; i--)
23     {
24         for (int j = 0; j < i - 1; j++)
25         {
26             if (b[j] < b[j+1])
27             {
28                 int temp = b[j];
29                 b[j] = b[j + 1];
30                 b[j + 1] = temp;
31             }
32         }
33     }

 

將a剩下的元素逐個插入數組b正確的位置上:

方法1:

 1     //將a剩下的元素與b中第K個元素比較,如果大於b中第K個元素,就將b中第K個元素賦值為a的元素,然后重新以降序排序數組b
 2     for (int i = K; i < N; i++)
 3     {
 4         if (a[i] > b[K - 1])
 5         {
 6             b[K - 1] = a[i];
 7 
 8             for (int j = K - 1; j > 0; --j)
 9             {
10                 if (b[j] > b[j - 1])
11                 {
12                     int temp = b[j];
13                     b[j] = b[j - 1];
14                     b[j - 1] = temp;
15                 }
16             }
17         }
18     }

 

方法2:

 1 //將a剩下的元素與b中的從第1個到第K個元素逐個比較,遇到大於b中的元素時,將b中該元素之后的所有元素都賦值為其本身前一位的元素的值,然后該元素賦值為a的元素。
 2     for (int i = K; i < N; i++)
 3     {
 4         for (int j = 0; j < K; j++)
 5         {
 6             if ( b[j] < a[i])
 7             {
 8                 for (int m = K - 1; m > j; m--)
 9                 {
10                     b[m] = b[m - 1];
11                 }
12 
13                 b[j] = a[i];
14                 
15                 break;
16             }
17         }
18     }

 

輸出數組a中第K大的數:

1     //輸出b中第K個元素
2     printf("%d\n", b[K - 1]);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM