`

快速排序及二分查询测试

J# 
阅读更多

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;
	}
	
	

}
 
分享到:
评论

相关推荐

    采用递归分治算法写的快速排序

    采用递归分治算法写的快速排序 这是为上机考试准备的,呵呵

    Objective C 二分查找(快速排序)

    使用Objective C语言编写的二分查找程序,查找前使用快排排序,测试运行通过,可做为Objective C入门学习的资料。

    C语言快速排序与二分查找算法示例

    主要介绍了C语言快速排序与二分查找算法,涉及C语言随机数生成、快速排序及二分查找等算法相关实现技巧,需要的朋友可以参考下

    基础排序, 高级排序, 堆, 二分搜索树, 并查集, 图以及图相关算法知识总结

    快速排序 随机化快速排序 双路快速排序 三路快速排序 堆和堆排序 堆的基本存储 ShiftUp ShiftDown 基础堆排序和Heapify 优化的堆排序 索引堆(IndexHeap) 索引堆的优化 二分搜索树 二分查找法(Binary Search) 二分...

    3着色4皇后矩阵链快速排序公共子序列

    3着色问题、4皇后问题、矩阵链相乘、二分搜索、快速排序、最长公共子序列算法,vs中测试通过!

    QuickSort_binarySearch.rar_查找和排序

    50万数据的快速排序和二分查找算法实现及性能测试

    常用排序算法C++实现

    常用8个排序算法的C++实现,经测试全部可以运行通过,分别是插入排序,选择排序,冒泡排序,二分插入排序,希尔排序,快速排序,堆排序,归并排序

    流行算法排序实用案例

    这个demo里写了快速、冒泡、二分、插入、希尔等排序算法的实例,并进行跑分排名。本人测试结果最优算法是插入排序。

    数据结构排序与搜索算法

    非常基础的数据结构算法,排序与查找,也是考试经常考的,像插入排序、选择排序、快速排序以及顺序查找、二分查找和树查找等!

    计算机算法设计分析考试附带答案 本文链接:https://blog.csdn.net/Candy5204/article/det

    用伪代码或程序语言写出二分搜索的算法,并分析其时间复杂度。 简述分治法在每一层递归上的三个步骤的具体内容。 简述快速排序的具体过程。 有面值分别为1、5和11单位的硬币,希望找回总额为15单位的硬币,贪心算法...

    算法设计与分析章节测试一

    ackerman,全排列,整数划分,二分,合并排序,快速排序相关代码。

    java笔试常见的算法题

    全排序、二分查找、冒泡排序、阶乘、最大公约数、最小公倍数、打印九九乘法表、判断素数、快速排序的递归实现和非递归实现、随机数、字符串操作、50人围成一圈,数到3和3的倍数的人出局,最后剩下的人是谁。...

    algorithm-java:基础算法Java版本 --持续更更新中

    说明:从多角度进行测试及包括数据重复率,数据有序性等对单一角度或者多角度提出算法的优化策略 搜索算法 二分搜索树 二分搜索法及其变体 并查集基础算法 算法设计技巧 分治算法 最大子向量和问题 动态规划算法 最...

    编程珠玑 第二版 修订版

    2.2 无处不在的二分搜索 12 2.3 基本操作的威力 13 2.4 排序 15 2.5 原理 16 2.6 习题 17 2.7 深入阅读 18 2.8 变位词程序的实现(边栏) 18 第3章 数据决定程序结构 21 3.1 一个调查程序 21 3.2 格式信函...

    计算机二级公共基础知识

    下一节排序中,有序的含义也是如此。 对于长度为n的有序线性表,利用二分法查找元素X的过程如下: 步骤1:将X与线性表的中间项比较; 步骤2:如果X的值与中间项的值相等,则查找成功,结束查找; 步骤3:如果X小于...

    php项目-php+mysql学生成绩查询(系统).rar

    该系统旨在提供一个直观、便捷的途径,使学生、教师和家长能够快速查询学生的考试成绩,同时支持数据的添加、修改和删除操作,方便对成绩进行管理。 主要功能特点: 1. 用户友好的界面设计,简洁明了,易于操作。 2...

    50用户在线考试系统

    本考试系统由前台考生考试部分和后台系统管理部分组成。 一、前台部分 1、 选择课程: (1)、考试部分 考试权限模式有两种:  1、课程管理员后台设定:由课程管理员在考生考试之前预先设定好每个的试卷 。  2、...

    数据结构算法实验考试代码合集

    数组栈 数组实现队列 链表实现栈 ...二分查找法 任意构造层次遍历输出 二叉排序树 先根建立二叉树及遍历 堆排 顺序栈两个迎面增长 树深度节点数 有序链表的合并 快速排序 头插法建立链表 循环链表实现队列

    蓝桥杯(Python)相关知识点记录,包含基础知识点,数据结构等算法实现,真题练习

    蓝桥杯Python相关的知识点记录包括基础知识点、数据结构等算法实现以及真题练习项目说明。以下是对这些内容的简要概述: 一、基础知识点 ...排序与查找:如冒泡排序、快速排序、二分查找等算法的实现和应用。

Global site tag (gtag.js) - Google Analytics