码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-01-11 23:03:10      阅读:380      评论:0      收藏:0      [点我收藏+]

标签:

求一组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 }

 

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

标签:

原文地址:http://www.cnblogs.com/wzm-xu/p/4217213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!