查找一个数组中最大的十个数据。
首先我写了一个快速排序的方法:
public class quickSort {
/**
* 以第一个数据为标准,小的放在右边,大的放在左边
* @param t 要排序的数据,默认从小到大排
* @param left 数据的下界
* @param right 数据的上届
*/
public static void QuickSort(int t[],int left,int right){
int i=left,j=right;
if(i>=j) return;//若有变的下标不小于左边,结束返回。
int temp=t[i];
while(i<j){
while(i<j&&t[j]>=temp) j--;//找到左边比第一个数据要小的数据
if(i<j) t[i]=t[j];//将其赋值给相应的右边数据
while(i<j&&t[i]<=temp) i++;//找左边比第一个数据要大的
if(i<j) t[j]=t[i];//将数据赋给右边
}
t[i]=temp;
QuickSort( t,left,i-1);//递归
QuickSort( t,i+1,right);
}
}
然后写了另一个利用小顶堆来找最大的的是个数据的方法
import java.util.Random;
import java.util.Scanner;
public class search {
public static void main(String[] args){
Random ran=new Random();
int t[]=new int[11];
int a[]=new int[101];
for(int i=1;i<101;i++){
a[i]=ran.nextInt(1000);
}
for(int i=1;i<11;i++){
t[i]=a[i];
}
quickSort.QuickSort(t,1,10);
for(int j=11;j<101;j++){
if(t[1]<a[j]){
t[1]=a[j];
priority(t,1);
}
}
for(int i=1;i<11;i++){
System.out.print(t[i]+" ");
}
/*System.out.println("");
for(int i=1;i<101;i++){
System.out.print(a[i]+" ");
}*/
}
/**
* 安小顶堆的方式递归数组得到最小的数
* @param t 数组
* @param q 数组下标
*/
public static void priority(int t[],int q){
if(q>=6)return;
int k,p,g,i,j;
if(q<5){
k=q;
p=2*q;
g=0;
i=t[k]-t[p];
j=t[k]-t[p+1];
if(i<=0&&j<=0) return;
if(i>0||j>0){
if(i>0&&j<0){
t[k]=t[k]+t[p];
t[p]=t[k]-t[p];
t[k]=t[k]-t[p];
g=p;
}
if(j>0&&i<0){
t[k]=t[k]+t[p+1];
t[p+1]=t[k]-t[p+1];
t[k]=t[k]-t[p+1];
g=p+1;
}
if(i>0&&j>0){
if(i>j){
t[k]=t[k]+t[p];
t[p]=t[k]-t[p];
t[k]=t[k]-t[p];
g=p;
}
if(i<=j){
t[k]=t[k]+t[p+1];
t[p+1]=t[k]-t[p+1];
t[k]=t[k]-t[p+1];
g=p+1;
}
}
}
priority(t,g);
}else{
k=q;
p=2*q;
if(t[k]>t[p]){
t[k]=t[k]+t[p];
t[p]=t[k]-t[p];
t[k]=t[k]-t[p];
return;
}else{
return;
}
}
}
}
分享到:
相关推荐
在C++中,我们可以利用数组来模拟堆的数据结构。以下将详细介绍堆排序的原理、步骤以及如何用C++实现。 堆排序的核心在于堆数据结构。一个堆是一个近似完全二叉树的结构,并同时满足堆的性质:即父节点的键值或索引...
1. **堆的实现**:理解大顶堆或小顶堆的数据结构,通常是数组模拟。堆的性质需要通过特定的调整操作(如 sift-up 或 sift-down)来保持。 2. **插入操作**:当向堆中插入新元素时,需要确保插入后仍然满足堆的性质...
1. **堆的构建**:通常使用数组来表示堆,初始化时可能需要将输入数据构建成大顶堆。 2. **插入操作**:新元素如何插入到堆中并保持堆的性质。 3. **删除最大元素**:如何找到并移除堆顶的最大元素,同时保持堆的...
以下是一个使用JavaScript数组实现堆栈功能的简单示例: ```javascript // 初始化一个空数组,作为堆栈 var stack = []; // 压栈操作 stack.push("one"); stack.push("two"); stack.push("three"); // 输出堆栈的...
个人认为这种数据结构还是蛮简单方便的,当然,为了更简便,我使用了2个数组来模拟小顶堆和大顶堆。 编写起来,取得了蛮好的效果。~ 查询最大优先队列的元素,和最小优先队列的元素,时间复杂度为o(1) 因为...
对于数组形式的序列,可以使用索引来模拟树的结构,一般从最后一个非叶子节点开始自底向上进行调整。 2. **交换与调整**:将堆顶元素(即当前最大或最小元素)与数组末尾元素交换,然后将末尾元素移除,此时末尾...
在Java中,我们可以使用数组来模拟堆的数据结构。本文件“Java实现堆排序.rar”可能包含了用Java语言编写的堆排序算法的源代码示例。下面我们将深入探讨堆排序的基本原理、步骤以及如何在Java中实现。 堆排序的核心...
它通过环形数组模拟钟表,每个槽位代表一定时间间隔,用链表存储待执行的任务。插入延迟任务时,根据延迟时间和单位时间的余值确定任务应插入的槽位。时间轮的优势在于,插入和删除任务的时间复杂度为O(1),并且可以...
C语言中,可以使用数组实现大顶堆或小顶堆。 7. **哈希表**:哈希表通过散列函数将键映射到特定位置,实现快速查找。冲突处理是哈希表设计的关键。C语言中,可以使用数组和链表组合来实现哈希表。 8. **图**:图是...
在C语言中,可以通过动态分配内存实现栈,或者利用数组模拟栈。队列是先进先出(FIFO)的数据结构,适用于任务调度、缓冲区管理等,C语言中通常使用数组或链表实现。 非线性结构主要包括树和图。树是一种层次结构,...
PHP中可以通过数组实现大顶堆和小顶堆,用于优先级队列等场景。 9. 散列表(Dictionary):散列表是一种通过键值对存储数据的数据结构,与哈希表类似,用于快速查找。PHP的关联数组就实现了散列表的功能。 10. ...
### 华为2019网络精英挑战赛初赛模拟题-基础开发C++方向知识点解析 #### C++基础知识及编程规范 1. **华为公司对待网络安全的态度**: - **知识点**:华为公司高度重视网络和业务的安全性保障,将其视为与公司的...
Java中,可以使用数组来模拟堆结构,通过构建大顶堆或小顶堆进行排序。首先将待排序序列构造成一个大顶堆(或小顶堆),然后将堆顶元素与末尾元素互换,接着调整剩余元素重新构造堆,如此反复,直到整个序列有序。 ...
- 利用数组来模拟堆结构,避免了使用链表等其他数据结构带来的额外空间开销。 - **缺点**: - 堆排序是不稳定的排序算法,即相等的元素在排序后可能会改变原有的顺序。 - 在构建和调整堆的过程中,需要执行多次...
在计算机科学中,堆通常被实现为一个数组,分为大顶堆和小顶堆两种类型。大顶堆是每个父节点的值都大于或等于其子节点的值,而小顶堆则是每个父节点的值小于或等于其子节点的值。在这个“看图聊算法”的PDF文档中,...
C语言中可以使用数组模拟静态队列,或者使用链表实现动态队列。 5. **树**:树是一种非线性数据结构,每个元素(节点)可以有零个或多个子节点。二叉树是最常见的一种,包括二叉搜索树(BST)、完全二叉树、满...
12. **堆**:堆分为大顶堆和小顶堆,大顶堆满足父节点的键值大于或等于其子节点的键值,小顶堆则相反。 判断题部分涉及到双链表、循环队列、链表操作、栈、图的拓扑序列、完全图、顺序查找、二叉排序树、堆和二路...
C语言实现堆时,通常使用数组模拟,支持插入、删除和调整堆的操作。 以上就是一些基本的数据结构及其C语言实现的关键点。理解并能熟练运用这些数据结构,对于提升编程能力和解决实际问题至关重要。在《数据结构》的...
首先,将无序数组构造成大顶堆(或小顶堆),然后交换堆顶元素与末尾元素,调整剩余元素重新成堆,不断重复这个过程,直至整个数组有序。在C语言中,可以使用数组来表示堆,通过调整函数实现堆化。 总的来说,这些...
在C语言中,可以使用数组模拟堆,并提供插入、删除最小元素等操作。这里我们用一个大小为5的小顶堆,堆顶始终保存出现频率最高的字母: ```c // 堆操作的代码实现略 ``` 然后,将计数器数组中的元素逐个插入堆,...