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

 import java.util.Random;

 public class K_Max {

     /**
      * @param args
      */
     //求第K大的数,保证K大于等于1,小于等于array.length/2哦
     public static int TopK(int array[],int K)
     {
         int topk[] = new int [K];
         for(int i = 0; i<topk.length;i++)
             topk[i] = array[i];

         InsertSort(topk);//从小到大

         for(int i = topk.length; i<array.length;i++)
         {
             int target = array[i];
             if(target < topk[0])
                 ;
             else
             {
                 int position = findInsertPlace(topk,target,0,topk.length-1);
                 for(int j = 0;j<position;j++)
                     topk[j] = topk[j+1];
                 topk[position] = target;
             }
         }
         return topk[0];
     }
     //二分查找应该插入的位置
     public static int findInsertPlace(int [] A,int target,int a, int b)
     {
         int  middle = a+(b-a)/2;
         if(a>b)
             return b;
         else if (A[middle]==target)
             return middle;
         else if (A[middle]< target)
             return findInsertPlace(A,target,middle+1,b);
         else
             return findInsertPlace(A,target,a,middle-1);
     }
     //插入排序
     public static void InsertSort(int [] num)//从小到大排序
     {
         for(int i =1; i<num.length;i++)
         {
             int temp = num[i];
             int j=i-1;
             while(j>=0 && temp < num[j])
             {
                 num[j+1]=num[j];
                 j--;
             }
             num[j+1] = temp;
         }

     }
     public static void main(String[] args) {
         //随机赋值一个数组
         int randomArray[] = new int[15];
         Random random = new Random();
         for(int i = 0; i < randomArray.length;i++) {
             randomArray[i] = Math.abs(random.nextInt()%(randomArray.length*10));
         }
         int K =3;
         int k_max = TopK(randomArray,K);
         System.out.println("The "+K +" th biggest number of:");
         InsertSort(randomArray);
         for(int a:randomArray)
             System.out.print(a+" ");
         System.out.println();
         System.out.println("is: "+k_max);
     }
 }

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

  1. 数据结构与算法分析——C语言描述 第三章的单链表

    数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...

  2. 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)

    #include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...

  3. C语言学习书籍推荐《数据结构与算法分析:C语言描述(原书第2版)》下载

    维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行 ...

  4. 《数据结构与算法分析——C语言描述》ADT实现(NO.00) : 链表(Linked-List)

    开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-L ...

  5. 《数据结构与算法分析-Java语言描述》 分享下载

    书籍信息 书名:<数据结构与算法分析-Java语言描述> 原作名:Data Structures and Algorithm Analysis in Java 作者: 韦斯 (Mark A ...

  6. 读书笔记:《数据结构与算法分析Java语言描述》

    目录 第 3 章 表.栈和队列 3.2 表 ADT 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 Java Collections API 中的表 3.3.1 Collection 接口 ...

  7. 《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes

    表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了声明. 本章学习重点: 理解抽象数据类 ...

  8. 【数据结构与算法分析——C语言描述】第二章总结 算法分析

    算法 算法(algorithm)是为求解一个问题需要遵循的.被清楚地指定的简单指令的集合. 数学基础 四个定义: 1.大O表示法: 如果存在正常数 c 和 n0 使得当 N ≥ n0时,T(N) ≤ ...

  9. 《数据结构与算法分析——C语言描述》ADT实现(NO.05) : 散列(Hash)

    散列(Hash)是一种以常数复杂度实现查找功能的数据结构.它将一个关键词Key,通过某种映射(哈希函数)转化成索引值直接定位到相应位置. 实现散列有两个关键,一是哈希函数的选择,二是冲突的处理. 对于 ...

随机推荐

  1. HDU 5455 Fang Fang 水题,但题意描述有问题

    题目大意:f[1]=f,f[2]=ff,f[3]=ffc,以后f[n]每增加1,字符串增加一个c.给出一个字符串,求最少有多少个f[]组成.(字符串首尾相连,比如:ffcf可看做cfff) 题目思路: ...

  2. Struts2中的验证框架

    通过注解的方式,可以让方法不用验证 @SkipValidation public String toRegView() { System.out.println("toRegView&quo ...

  3. java 数据结构 图

    以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客,主要是在自己理解的基础上进行记录. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示 ...

  4. 空指针错误 java.lang.NullPointerException

    使用基本的JAVA数据类型,变量的值要么已经是默认值,如果没有对其正常赋值,程序便 不能通过编译,因此使用基本的JAVA数据类型(double,float,boolean,char,int,long) ...

  5. [转]solr DataImportHandler 解决mysql 表导入内存溢出问题

    最近一个项目要用到solr做全文检索,开始盲人摸象. 用tomcat 7 开始配置,开始正常,但是遇到cookie里有中文就报错. 无奈,换tomcat 6, 结果DataImportHandler ...

  6. Datatable.select() 方法的使用

    文章为转载 ,原文地址 DataTable是我们在进行开发时经常用到的一个类,并且经常需要对DataTable中的数据进行筛选等操作,下面就介绍一下Datatable中经常用到的一个方法--Selec ...

  7. Linux 查看 硬件配置

    一:查看cpu more /proc/cpuinfo | grep "model name" grep "model name" /proc/cpuinfo 如 ...

  8. Android开发之如何保证Service不被杀掉(broadcast+system/app)

    序言 最近项目要实现这样一个效果:运行后,要有一个service始终保持在后台运行,不管用户作出什么操作,都要保证service不被kill,这可真是一个难题.参考了现今各种定制版的系统和安全厂商牛虻 ...

  9. As Fast As Possible

    As Fast As Possible On vacations n pupils decided to go on excursion and gather all together. They n ...

  10. vc6 pbo 文件为空的解决方法

    使用Profile调试vc6应用程序的性能时,将生成pbo文件,今天在vc IDE中增加了命令行启动参数,导致profile无法生成pbo文件,进而无法生成性能报告. 解决方法: 去掉IDE中的命令行 ...