首页 > 代码库 > 《数据结构与算法分析:C语言描述》读书笔记------练习1.1 求第K大的数
《数据结构与算法分析: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 else24 {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大的数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。