import java.util.Arrays;
public class SortsAndBinarySearch {
public static void main(String[] args) {
//待排序数组
int[] arr = { 4, 9, 23, 1, 45, 27, 5, 2 };
//快速递归排序
QuickSort(arr, 0, arr.length - 1);
//打印排序结果
System.out.println(Arrays.toString(arr));
//二分查找4对应下标,注意二分必须先排序
System.out.println("下标:"+binarySearch(arr,4));
}
public static int binarySearch(int[] data, int aim) {
// 以int数组为例,aim为需要查找的数
int start = 0;
int end = data.length - 1;
int mid = (start + end) / 2;
while (data[mid] != aim && end > start) {// 如果data[mid]等于aim则死循环,所以排除
if (data[mid] > aim) {
end = mid - 1;
} else if (data[mid] < aim) {
start = mid + 1;
}
mid = (start + end) / 2;
}
return (data[mid] != aim) ? -1 : mid;
}
public static void QuickSort(int[] data, int low, int high) {
// 枢纽元,一般以第一个元素为基准进行划分
int i = low;
int j = high;
if (low < high) {
// 从数组两端交替地向中间扫描
int pivotKey = data[low];
// 进行扫描的指针i,j;i从左边开始,j从右边开始
while (i < j) {
while (i < j && data[j]>pivotKey) { j--; }
// 比枢纽元素小的移动到左边
if (i < j) {
data[i] = data[j];
i++;
}
while (i < j && data[i]<pivotKey) { i++; }
// 比枢纽元素大的移动到右边
if (i < j) {
data[j] = data[i];
j--;
}
}
data[i] = pivotKey;// 枢纽元素移动到正确位置
QuickSort(data, low, i - 1); // 前半个子表递归排序
QuickSort(data, i + 1, high);// 后半个子表递归排序
}
}
}
分享到:
相关推荐
3. 对基准左右两侧的子数组分别进行递归排序。 4. 当子数组只剩一个元素时,排序结束。 在Java中,快速排序可以这样实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, ...
在C实现中,快速排序通常会使用递归函数,而二分查找可以写成迭代或递归的形式。结合快速排序和二分查找,可以先使用快速排序将数组排序,然后在需要查找元素时使用二分查找,这样可以大大提高查找效率,因为快速...
【快速排序】是一种高效的排序算法...快速排序尤其适用于大数据量的排序,而二分查找则适合在已排序的数据中查找特定元素。在这个Java程序中,这两个算法被巧妙地结合在一起,提供了一个完整的银行客户信息管理的示例。
1. **二分查找**:二分查找是针对有序数组的一种高效查找算法。在Java中,递归版本首先确定中间元素,如果目标值等于中间元素,则查找成功;若目标值小于中间元素,则在左半部分递归查找,反之在右半部分查找。 2. ...
快速排序和二分查找是两种在计算机科学中广泛使用的算法,尤其在处理数据排序和查找问题时效率极高。本文将详细介绍这两种算法的概念、工作原理、实现方式以及它们的应用场景。 快速排序是一种高效的排序算法,由C....
在Java编程中,文件读取、数组操作、选择排序以及二分查找是常见的编程任务,它们涉及了IO流、数据结构和算法等多个方面。以下是这些知识点的详细解释: 1. **文件读取**:Java提供了丰富的IO流类库用于读取文件。...
根据给定的文件信息,我们可以深入探讨两个关键的计算机科学概念:快速排序(Quick ...通过分析给定的代码片段,我们深入了解了快速排序的递归机制以及二分查找在有序数组中的应用,进一步巩固了对这些核心概念的理解。
需要注意的是,二分查找的前提是输入数组必须是有序的,对于无序数据,通常需要先进行排序。 二分查找的效率非常高,时间复杂度为O(log n),这是因为每次查找都将问题规模减半。这使得它在处理大型数据集时非常有效...
根据给定文件的信息,本文将围绕“一维数组的快速排序及查找(递归与迭代实现)”这一主题展开详细讨论。文章将涵盖快速排序的基本原理、递归与迭代实现方式,以及查找算法的递归与迭代实现。此外,还会简要介绍递归...
最后,我们讨论折半查找,也称为二分查找。这是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束;如果目标值大于或小于中间元素,则在数组...
在本实验中,主要涉及了两个重要的编程概念:递归和迭代,并且这些概念被应用于数组的排序(快速排序)和查找(二分查找)中。以下是对这两个关键概念及其在C语言中的实现的详细解释。 1. **递归**: 递归是一种...
在Python3中实现非递归二分查找,首先需要一个已经排序的列表。以下是实现该算法的关键步骤: 1. 初始化查找范围:设置查找区间的左右边界,通常是`[0, len(array) - 1]`。 2. 当左边界小于等于右边界时,进入循环...
3. **递归排序**:对基准元素左右两边的子序列,分别进行快速排序。这个过程会一直持续到子序列只有一个元素为止,此时整个序列已排序完成。 在Java Applet中展示这两种算法的过程,可以帮助初学者更好地理解它们的...
3. **递归排序**:对左右两个子序列分别进行快速排序。 **递归实现**:快速排序的递归版本非常直观,直接按照上述步骤进行。选择枢轴后,递归地对左右子序列进行快速排序,直到子序列只剩下一个元素或为空,此时...
二分查找,也称为折半查找,是一种...同时,二分查找也可以作为其他算法的基础,如在排序算法中用于快速定位插入位置。了解并熟练掌握递归二分查找对于理解和优化算法性能至关重要,这也是软件开发人员必备的技能之一。
但在最坏的情况下,如果序列已经部分排序或完全排序,快速排序的时间复杂度会退化到O(n^2)。尽管如此,由于快速排序在实际应用中的优秀性能,它仍然是许多编程语言内置排序函数的首选算法。 快速排序的一个缺点是它...
Java实现时,通常会用到递归或循环来执行二分查找。 2. **归并排序**(Merge Sort):归并排序是将大问题分解为两半,对每半分别进行排序,然后合并两个已排序的子序列。它的主要步骤包括分解、排序子序列和合并。...
本实验重点探讨了二分检索(又称二分查找)的递归实现,这是一种在有序数组中寻找特定元素的有效方法。在此,我们将深入探讨二分检索的基本概念,递归的原理以及如何在C++中实现这一算法。 二分检索的核心思想是在...