package wuliao;
import java.util.Random;
public class SearchTest {
public static void main(String[] args) {
SearchTest test = new SearchTest();
test.search();
}
public void search() {
int key = 0;
int[] data = new int[10000000];
Random r = new Random();
for (int i = 0; i < data.length; i++) {
data[i] = r.nextInt(data.length * 2);
if(i == data.length /3){
key = data[i];
}
}
//System.out.println(ArrayUtils.toString(data, ""));
long s = System.currentTimeMillis();
quickSort(data,0,data.length-1);
System.out.println("快速排序:数量:"+data.length + ";时间:"+(System.currentTimeMillis() - s));
//System.out.println(ArrayUtils.toString(data, ""));
s = System.currentTimeMillis();
int rt = binarySearch(data,key);
System.out.println("二分查找:时间:"+(System.currentTimeMillis() - s)+ (rt != -1?"ms ;find key index : " + rt:"have not exist"));
}
public int binarySearch(int[] data,int key){
int start = 0;
int end = data.length-1;
while(true){
int mid = (start + end)/2;
if(data[mid] > key){
start = 0;
end = mid;
}else if(data[mid] < key){
start = mid+1;
}else{
return mid;
}
if(start >= end){
return -1;
}
}
}
public void quickSort(int[] data, int left, int right) {
if(left >= right)
return;
int index = (left + right) / 2;
int mid = data[index];
int i = left-1, j = right+1;
while (true) {
while (data[++i] < mid);
while (data[--j] > mid);
if(i >= j){
break;
}
swap(data, i, j);
}
quickSort(data,left,i-1);
quickSort(data,j+1,right);
}
public void swap(int[] data, int i, int j) {
int t = data[i];
data[i] = data[j];
data[j] = t;
}
}
分享到:
相关推荐
采用递归分治算法写的快速排序 这是为上机考试准备的,呵呵
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R....以上就是关于快速排序的基本原理、实现细节及其测试策略的详细说明。在实际编程中,理解和掌握快速排序的这些知识点对于编写高效的排序代码至关重要。
C语言快速排序与二分查找算法示例 C语言快速排序与二分查找算法是计算机科学中两个非常重要的算法,在实际应用中有着广泛的应用。本文将详细介绍C语言快速排序与二分查找算法的实现技巧,并提供了一个完整的示例...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的...
而二分插入排序通过引入二分查找技术,能够在已排序序列中快速定位待插入元素的正确位置,从而显著减少比较次数,提高排序效率。 #### 三、代码实现与分析 以下是对二分插入排序的C语言实现进行详细解析: ```c #...
`quicksort.cpp`和`quicksort.h`文件通常涉及快速排序算法,这可能是为了生成测试数据,因为有序数组是执行二分检索的前提。快速排序是一种常用的内部排序算法,采用分治策略,以递归方式将大问题分解为小问题来解决...
快速排序 随机化快速排序 双路快速排序 三路快速排序 堆和堆排序 堆的基本存储 ShiftUp ShiftDown 基础堆排序和Heapify 优化的堆排序 索引堆(IndexHeap) 索引堆的优化 二分搜索树 二分查找法(Binary Search) 二分...
在插入元素时,通过二分查找找到合适的位置,从而减少比较次数。它适合于已经部分排序的数据,时间复杂度为O(n log n)到O(n^2)。 2. 冒泡排序(Bubble Sort): 冒泡排序是最简单的排序方法之一,通过不断交换相邻...
二分查找算法是一种高效的数据搜索方法,主要应用于已排序的序列。它的基本思想是通过不断地将待搜索区域减半来快速定位目标值。这个过程基于分治策略,将大问题分解为更小的子问题来解决。在二分查找算法中,每次...
这篇描述涉及到了几个高级的排序算法,其中包括快速排序、桶排序和二分插入排序,这些都是高效且广泛应用的排序方法。让我们详细了解一下这些算法以及如何在C++中实现它们。 **快速排序** 是由C.A.R. Hoare在1960年...
在"erfenchaz.rar"压缩包内,我们有一个关于二分查找的函数模板及相关的测试程序,这将帮助我们更好地理解和应用二分查找。以下是对这个函数的详细解释: 1. **二分查找函数模板**:通常,一个二分查找函数会接受三...
本文将深入探讨“流行算法排序实用案例”中涉及到的几种常见排序算法:快速排序、冒泡排序、二分插入排序、希尔排序,并结合Java语言进行详细解析。 1. **快速排序**: 快速排序是一种高效的排序算法,由C.A.R. ...
通过编写测试用例,可以检查在不同场景下,如空数组、只包含一个元素的数组、已排序的数组、未排序的数组等,二分查找算法的表现。 总之,二分查找算法是计算机科学中的一个重要概念,它在数据结构和算法领域有着...
本资料"面试常见编程题汇总包含快排,二分查找"聚焦于两个经典的算法:快速排序(Quick Sort)和二分查找(Binary Search),这些都是在实际工作中频繁使用的高效算法。 快速排序是一种基于分治思想的排序算法,由C...
值得注意的是,二分搜索的前提是数据已经排序,如果数据未排序,则需要先进行排序,或者使用其他适合未排序数据的搜索算法。 大整数算法和二分搜索算法在实际应用中有很多结合点。例如,在处理大量有序的整数数据时...
4. **执行二分搜索**:在排序后的数据上应用二分搜索算法,查找目标值。 5. **处理结果**:根据二分搜索的返回值,输出找到的元素索引或提示未找到。 在提供的压缩包文件“二分搜索C++实现”中,应包含实现这些...
快速排序和二分查找是计算机科学中两种非常重要的算法,它们在处理大量数据时具有高效性和实用性。在“QuickSort_binarySearch.rar_查找和排序”这个压缩包中,包含了一个名为“QuickSort_binarySearch.txt”的文件...
快速排序则是通过一个“轴心”元素将数组分为左右两部分,左边部分的元素都不大于轴心,右边部分的元素都不小于轴心,然后递归地对左右两部分进行快速排序。 归并排序包括二路归并和自然归并。归并排序的核心思想是...
二分查找法适用于已排序的数组或列表,如在大量数据中快速定位特定值,或者在数据库索引中查找数据等。但要注意,对于无序数据,二分查找法不适用,需要先进行排序。 5. **优化和变种**: - 对于含有重复元素的...
- **实现多种排序算法**:至少实现三种排序方法(如插入排序、冒泡排序、快速排序),并通过随机生成的大规模数据集进行测试。 - **性能比较**:记录并比较每种排序方法在处理大规模数据集时所需的运行时间,分析其...