《数据结构与算法分析:C语言描述》读书笔记------练习1.1 求第K大的数
求一组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大的数的更多相关文章
- 数据结构与算法分析——C语言描述 第三章的单链表
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...
- 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)
#include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...
- C语言学习书籍推荐《数据结构与算法分析:C语言描述(原书第2版)》下载
维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行 ...
- 《数据结构与算法分析——C语言描述》ADT实现(NO.00) : 链表(Linked-List)
开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-L ...
- 《数据结构与算法分析-Java语言描述》 分享下载
书籍信息 书名:<数据结构与算法分析-Java语言描述> 原作名:Data Structures and Algorithm Analysis in Java 作者: 韦斯 (Mark A ...
- 读书笔记:《数据结构与算法分析Java语言描述》
目录 第 3 章 表.栈和队列 3.2 表 ADT 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 Java Collections API 中的表 3.3.1 Collection 接口 ...
- 《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes
表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了声明. 本章学习重点: 理解抽象数据类 ...
- 【数据结构与算法分析——C语言描述】第二章总结 算法分析
算法 算法(algorithm)是为求解一个问题需要遵循的.被清楚地指定的简单指令的集合. 数学基础 四个定义: 1.大O表示法: 如果存在正常数 c 和 n0 使得当 N ≥ n0时,T(N) ≤ ...
- 《数据结构与算法分析——C语言描述》ADT实现(NO.05) : 散列(Hash)
散列(Hash)是一种以常数复杂度实现查找功能的数据结构.它将一个关键词Key,通过某种映射(哈希函数)转化成索引值直接定位到相应位置. 实现散列有两个关键,一是哈希函数的选择,二是冲突的处理. 对于 ...
随机推荐
- 50条规则提高PHP开发提高效率技巧
0.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作 参数的“函数”(译注:PHP手 ...
- SuperSocket+unity 网络笔记
学习SuperSocket 必须要注意的 代码是 static void Main(string[] args) { WebSocketServer appServer = new WebSocket ...
- Unity3D项目优化(转)
前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的 ...
- Mac机上安装虚拟机
1.首先要下载虚拟机VMware.网址http://pan.baidu.com/share/init?shareid=1519279671&uk=1434905687,连接该网址,下载里边的这 ...
- Lucene.NET中Field.Index 和 Field.Store的几种属性的用法
转载自 http://blog.csdn.net/yja886/article/details/6612069 lucene在doc.add(new Field("content" ...
- 扫盲: JAVA基本常识
http://java-mzd.iteye.com/blog/838514
- 优化之sitemap+RSS
RSS也叫聚合, RSS是在线共享内容的一种简易方式,也叫聚合内容,Really Simple Syndication. 通常在时效性比较强的网站或网络平台上应用RSS订阅功能可以更快速获取信息,网站 ...
- MySQL 建表
SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for ` ...
- svg都快忘了,复习一下
http://www.360doc.com/content/07/0906/21/39836_724430.shtml
- VMware克隆CentOS虚拟机后固定IP的问题
由于克隆虚拟机,VMware只是修改了虚拟机的名字等信息,并没有修改虚拟硬盘中的任何信息,导致克隆后网卡的MAC地址和操作系统中记录的mac地址不符,导致eth0启动不起来.操作系统记录了一个新网卡的 ...