《数据结构与算法分析:C语言描述》读书笔记------练习1.1 求第K大的数

求一组N个数中的第k个最大者,设k=N/2.

 1 import java.util.Random;
 2 
 3 
 4 public class K_Max {
 5 
 6     /**
 7      * @param args
 8      */
 9     //求第K大的数,保证K大于等于1,小于等于array.length/2哦
10     public static int TopK(int array[],int K)
11     {
12         int topk[] = new int [K];
13         for(int i = 0; i<topk.length;i++)
14             topk[i] = array[i];
15         
16         InsertSort(topk);//从小到大
17         
18         for(int i = topk.length; i<array.length;i++)
19         {
20             int target = array[i];
21             if(target < topk[0])
22                 ;
23             else
24             {
25                 int position = findInsertPlace(topk,target,0,topk.length-1);
26                 for(int j = 0;j<position;j++)
27                     topk[j] = topk[j+1];
28                 topk[position] = target;
29             }    
30         }
31         return topk[0];
32     }
33     //二分查找应该插入的位置
34     public static int findInsertPlace(int [] A,int target,int a, int b)
35     {   
36         int  middle = a+(b-a)/2;
37         if(a>b)
38             return b;
39         else if (A[middle]==target)
40             return middle;
41         else if (A[middle]< target)
42             return findInsertPlace(A,target,middle+1,b);
43         else 
44             return findInsertPlace(A,target,a,middle-1);
45     }
46     //插入排序
47     public static void InsertSort(int [] num)//从小到大排序
48     {
49         for(int i =1; i<num.length;i++)
50         {   
51             int temp = num[i];
52             int j=i-1;
53             while(j>=0 && temp < num[j])
54             {
55                 num[j+1]=num[j];
56                 j--;
57             }
58             num[j+1] = temp;
59         }
60        
61     }
62     public static void main(String[] args) {
63         //随机赋值一个数组
64         int randomArray[] = new int[15];
65         Random random = new Random();
66         for(int i = 0; i < randomArray.length;i++) {
67             randomArray[i] = Math.abs(random.nextInt()%(randomArray.length*10));
68         }
69         int K =3;
70         int k_max = TopK(randomArray,K);
71         System.out.println("The "+K +" th biggest number of:");
72         InsertSort(randomArray);
73         for(int a:randomArray)
74             System.out.print(a+" ");
75         System.out.println();
76         System.out.println("is: "+k_max);
77     }
79 }

 

转载于:https://www.cnblogs.com/wzm-xu/p/4217213.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值