`

数据结构回顾---排序,查找

 
阅读更多
首先说一下查找

    查找大概有一下几种:
   1.顺序查找,他的思想是:从起始位置开始,到结束,一个一个的去找,相当于是遍历一次数组,这个是基本的,

   2.折半查找,也叫二分发,他是对顺序查找的优化,折半查找有个硬性的要求,就是要查找的数组必须是有序的,否则没法实现。他的思想是:首先确定一个数组的中间位置的值,然后要查找的值和中间位置的这个值比较。如果相等了,则说明找到,如果小于(假设数组是正序的),则将查找区域设置在左半部分,如果是大于,则说明查找值在右半部分,一次类推,直到找到为止。
 
   非递归实现
   public static int zbcz(int a[], int key) {
int max = a.length;
int min = 0;

int mid = 0;

while (min <= max) {

mid = (min + max) / 2;
if (key == a[mid]) {
return mid;
} else if (key > a[mid]) {
min = mid + 1;
} else {
max = mid - 1;
}

}
return -1;
}
//递归实现

public static int dgzbcz(int[] a, int max, int min, int key) {
int mid = (max + min) / 2;
if (min > max) {
return -1;
}
if (key == a[mid]) {
return mid;
} else if (key > a[mid]) {
return dgzbcz(a, max, mid + 1, key);
} else {
return dgzbcz(a, mid - 1, min, key);
}

}
做了一下简单测试,建立一个int数组,大小为1000000000/7(再大内存溢出了),然后循环查找1000000000/7次。如下

    long start = System.currentTimeMillis();
// 折半查找 非递归
for (int i = 0; i < a.length; i++) {
zbcz(a, i);
}
System.out
.println("非递归找到花费时间为:" + (System.currentTimeMillis() - start));

使用大概在7.050秒上下,

  递归模式测试

   start = System.currentTimeMillis();
for (int i = 0; i < a.length; i++) {
//     System.out.println(zbcz(a, 10000000 - 1));
dgzbcz(a, a.length - 1, 0, 10000000 - 1);
}


System.out.println("递归找到花费时间为:" + (System.currentTimeMillis() - start));

大概使用时间为7200,由此可以看出来,递归需要花费的时间还是比非递归的要多一点,但是差异不是很大,

另外用同样的数字测试了一下顺序查找,结构死了,等了好久都没出来。

      3.分块查找

     分块查找(Blocking Search)又称索引顺序查找。它是一种性能介于顺序查找和二分查找之间的查找方法。我们可以理解他需要两个列表,一个是用来存放数据的,一个是用来存放索引列的,

          (1)"分块有序"的线性表
     表R[1..n]均分为b块,前b-1块中结点个数为   ,第b块的结点数小于等于s;每一块中的关键字不一定有序,但前一块中的最大关键字必须小于后一块中的最小关键字,即表是"分块有序"的

          抽取各块中的最大关键字及其起始位置构成一个索引表ID[l..b],即:
ID[i](1≤i≤b)中存放第i块的最大关键字及该块在表R中的起始位置。由于表R是分块有序的,所以索引表是一个递增有序表。

分块查找的基本思想是:
(1)首先查找索引表
  索引表是有序表,可采用二分查找或顺序查找,以确定待查的结点在哪一块。

(2)然后在已确定的块中进行顺序查找
  由于块内无序,只能用顺序查找。

今天就说这些吧,开始工作!!!!!!!!!
分享到:
评论

相关推荐

    数据结构和算法-思维导图.pdf

    - 二叉搜索树、散列列表、LURCache数据结构在查找操作中的时间和空间效率。 - 各种搜索算法如A*、BFS、DFS、广度优先、深度优先。 6. **存储结构**: - 顺序存储结构如数组,链式存储结构如单向链表、双向链表、...

    数据结构--C语言版

    - **第1章**:介绍数据结构和算法的基本概念,并回顾必要的数学知识和C#语言基础。这一章为读者提供了必要的背景知识,为后续深入学习打下坚实的基础。 - **第2章至第6章**:详细讨论了线性表、栈和队列、串和数组、...

    数据结构--考研了解

    例如,在查找和排序问题中,选择适当的数据结构可以显著提高算法的性能。 #### 六、考研复习策略 1. **基础知识牢固**:首先确保对各种数据结构的基本概念和操作熟练掌握。 2. **深入理解算法**:如深度优先搜索...

    数据结构1-19答案详细的奥

    数据结构是计算机科学中的核心课程,它探讨了如何有效地存储和组织数据,以便进行高效的检索、插入和删除操作。...同时,定期回顾和总结,加深对数据结构的理解,对于成为一名优秀的程序员至关重要。

    数据结构复习数据结构B习题1参考答案

    通过这份习题集,你可以系统地回顾和实践这些概念,加深对数据结构原理的理解。解题过程中,要注意分析每个问题背后的逻辑,理解不同数据结构的适用场景,以及如何通过它们来优化算法性能。同时,熟悉并掌握常见问题...

    数据结构-严蔚敏 带书签

    数据结构是计算机科学中的核心课程之一,主要研究数据如何在计算机中存储、组织和操作,以便高效地进行访问和处理。严蔚敏教授与吴伟民教授合著的《数据结构(C语言版)》是一本经典的数据结构教材,被广泛用于计算机...

    数据结构与算法--C++回顾

    STL提供了诸如向量、链表、集合、映射等高效的数据结构,以及算法如排序、查找等,极大地简化了程序员的工作。 以向量为例,C++中的vector类相比于基本数组提供了更安全、更便捷的操作。它具有内置的大小获取函数,...

    C语言版数据结构与算法分析-严蔚敏经典视频教程

    01-001数据结构的概念和基本术语、抽象数据类型的表示与实现 01-002算法设计的要求、算法效率的度量 02-001线性表的类型定义 02-002线性表的顺序表示与实现、线性表的基本操作 02-003单链表的创建与操作、加工型...

    数据结构-大二上复习思维导图

    这份"数据结构-大二上复习思维导图"提供了对这一主题的全面概述,主要分为查找、二叉树、排序和复习四个主要部分。 首先,我们来看查找。查找是数据结构中最基本的操作之一,它的目标是在数据集合中找到特定元素。...

    数据结构(C-#语言版)

    - **基础概念**:本书的第一章从数据结构和算法的基础概念入手,为读者提供了必要的理论准备,并简要回顾了相关的数学和C#基础知识。 - **常用数据结构**:第二章至第六章深入探讨了各种常用的数据结构,包括但不...

    西南交大-计算机-超级全面-数据结构期末复习资料.zip

    .pdf”很可能包含了各种数据结构相关的经典算法详解,如排序(快速排序、归并排序、冒泡排序等)、查找(二分查找、哈希查找)以及图和树的遍历方法(深度优先搜索、广度优先搜索)。这些算法是解决实际问题的基础,...

    数据结构(C#语言版)-数据结构(C#语言版)

    - **第1章**:介绍数据结构与算法的基本概念,并回顾本书所需的数学和C#语言基础知识。 - **第2章至第6章**:深入探讨线性表、栈和队列、串和数组、树型结构和图结构等数据结构,并讨论这些结构的应用以及.NET框架中...

    数据结构第3版(李春葆)PPT+源程序+上机程序

    在实验中,学生将尝试实现各种排序和查找算法,操作不同的数据结构,比如对链表、树、图等进行添加、删除和修改等操作。这些实验不仅有助于加深对数据结构理论的理解,还能提升解决实际问题的能力。 通过以上三个...

    张乃孝版数据结构课件

    7. **递归与分治策略**:许多数据结构算法如归并排序、二分查找等都使用了递归或分治的思想。 8. **复习提纲**:可能包括上述所有知识点的详细梳理,帮助学生系统地回顾和巩固所学内容。 9. **07年试卷**:可能...

    数据结构与算法:C#语言描述(中文)

    - 二叉查找树:介绍二叉树及其特殊类型——二叉查找树,这是一种高效的数据结构。 - **第13章:集合** - 唯一数据值存储:介绍在集合中存储唯一数据值的方法。 - **第14章:高级排序算法** - 快速排序:介绍...

    数据结构期末复习+试卷--杭电

    首先,我们来看"数据结构编程题汇总.doc",这个文档很可能包含了大量实际编程问题,这些问题可能涵盖了数组、链表、树、图等各种基本数据结构的实现,以及排序和查找算法的编写。通过解决这些题目,学生可以深入理解...

    计算机考研数据结构复习指导Word版

    数据结构是计算机科学中的核心课程,对于准备计算机考研的同学来说,深入理解和掌握数据结构的知识至关重要。这份"计算机考研数据结构复习指导Word版"提供了一条有效的学习路径,帮助考生们精准定位并攻克这个领域的...

    李春葆数据结构教程(第三版),上机源程序

    《李春葆数据结构教程(第三版)》是学习数据结构的重要教材,它涵盖了数据结构的基本概念、原理和实现方法。本教程不仅提供了理论知识,还强调了实践应用,通过课后上机习题帮助学生深入理解并掌握数据结构。在...

    薛超英C++数据结构PPT

    8. 第八章可能涉及哈希表,这是一种能实现快速查找的数据结构,通过哈希函数将键映射到存储位置,常用于数据库索引和缓存。 9. 第九章可能讲解堆,堆是一种特殊的树形数据结构,常用于实现优先队列,是许多高级算法...

Global site tag (gtag.js) - Google Analytics