快速排序和二分查找(Java)

import java.util.Arrays;

public class Main {

public static void main(String[] args) {

int[] data = {2, 3, 5, 1, 4, 5, 2, 13, 51, 9, 10, 15, 17, 6, 21, 33, 44, 77, 22};

System.out.println(Arrays.toString(data));        quickSort(data, 0, data.length - 1);        System.out.println(Arrays.toString(data));        int index = binarySearch(data, 4);        System.out.println(index);    }

private static int partition(int[] data, int left, int right) {        int i = left;        int j = right;        //pivot        int pivot = data[left + (right - left) / 2];        //完成一趟排序        while (i <= j) {            //从右往左找到第一个小于pivot的数            while (data[j] > pivot) {                j--;            }            //从左往右找到第一个大于pivot的数            while (data[i] < pivot) {                i++;            }            //交换            if (i <= j) {                int p = data[i];                data[i] = data[j];                data[j] = p;                i++;                j--;            }        }

return i;    }

public static void quickSort(int[] data, int left, int right) {

int index = partition(data, left, right);

if (left < index - 1) {            quickSort(data, left, index - 1);        }

if (index < right) {            quickSort(data, index, right);        }    }

public static int binarySearch(int[] data, int target) {        int left = 0, right = data.length - 1;        while (left <= right) {            int mid = left + (right - left) / 2;            if (data[mid] < target) {                left = mid + 1;            }            if (data[mid] >= target) {                right = mid - 1;            }        }        return left;    }

public int binarySearchRecur(int[] data, int target, int left, int right) {        if (left > right) {            return left;        }        int mid = left + (right - left) / 2;        if (data[mid] < target) {            return binarySearchRecur(data, target, mid + 1, right);        } else {            return binarySearchRecur(data, target, left, mid - 1);        }    }

}

原文地址:https://www.cnblogs.com/feicheninfo/p/9283338.html

时间: 2024-07-31 05:00:00

快速排序和二分查找(Java)的相关文章

学习快速排序和二分查找算法

1. 快速排序的思想采用的是分治算法实现,从头选择一个元素是作为"哨兵元素",然后从尾部开始寻找一个比"哨兵元素"小的元素,然后跟它交换,接着从头开始寻找比"哨兵元素"大的:元素,然后交换,直到"哨兵元素"的左边都"哨兵元素"小,右边都比"哨兵元素"大为止,这算是一次划分,快速排序是要经过的 k-1趟(假设有k个元素)划分才能排序好所有的元素. 下面根据分治实现的java代码: publ

二分查找 java代码

二分查找的前提是:你得先排好序,但是排序问题不在讨论. 直接上代码: import java.util.Optional; public class MyArray { public static void main(String[]args) { int[] arr = new int[]{1,2,3}; for (int i = 0; i < arr.length; i++) { System.out.println("arr[" + i + "]=" +

C语言练习题1(关于快速排序,二分查找与运行时间)

刚刚完成师兄给的一道题目: 随机生成10000位数,进行快速排序后,用二分查找法定位到某个要查询的数(键盘输入某个要查询的数),  结果输出查询的时间,以及是否查到 分享下自己的解题思路: 1,要懂得如何随机生成数 2,要了解快速排序以及二分法思想 3,要直到如何测试出程序运行时间 下面是自己写的代码,欢迎各位提出宝贵的意见以及见解,小生感激不尽 1 /* 2 本代码描述: 3 4 随机生成10000位数,进行快速排序后, 5 用二分查找法定位到某个要查询的数 6 (键盘输入某个要查询的数),

JS冒泡排序,快速排序,二分查找

//冒泡排序 思想:一个数组双层循环,判断左右相邻的两个数值,大的在右小的在左,如果左的比右的大,双方替换位置 之所以要数组的长度减一,是因为数组是从0开始的,比如说一个数组有7个元素,它的长度为7,分别为a[0],a[1],a[2],a[3]a[4],a[5],a[6]这7个所以当你要取数组中最后一个a[6]时是需要用长度减1的而为什么要减i呢,则是因为你的冒泡排序是把最大的放到最后一位,比如第一次循环的时候进行排序完,最后一位是最大的了,根本没有必要在第二次循环当中把他在拿去比大小了吧,并且

快速排序和二分查找

快排和二分查找都基于一种叫做「分治」的算法思想,通过对数据进行分类处理,不断降低数量级,实现O(logN)(对数级别,比O(n)这种线性复杂度更低的一种,快排核心是二分法的O(logN),实际复杂度为O(N*logN))的复杂度. 快速排序 快排大概的流程是: 随机选择数组中的一个数 A,以这个数为基准 其他数字跟这个数进行比较,比这个数小的放在其左边,大的放到其右边 经过一次循环之后,A 左边为小于 A 的,右边为大于 A 的 这时候将左边和右边的数再递归上面的过程 const Arr = [

选择排序、冒泡排序、快速排序和二分查找的C语言实现

1 #include <stdio.h> 2 3 #define ASC 0 //升序,从左到右,从小到大 4 #define DESC 1 //降序,从左到右,从大到小 5 #define TRUE 1 //布尔值,真 6 #define FALSE 0 //布尔值,假 7 8 typedef int datatype; //定义数组元素的类型,这里暂定为int 9 10 void selectSort(datatype array_to_sort[], int length, int mo

二分查找JAVA实现

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功. 一.概念 二分查

二分查找-Java版

/** * * 二分查找算法 * * * * @param srcArray 有序数组 * * @param target 查找元素 * * @return srcArray数组下标,没找到返回-1 */ public int binarySearch(int[] srcArray, int target){ int left = 0; int right = srcArray.length - 1; while(left <= right) { int mid = (left + right)

二分查找 java

算法:当数据量很大适宜采用该方法.采用二分法查找时,数据需是有序不重复的. 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功:若 x 小于当前位置值,则在数列的前半段中查找:若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止. 假设有一个数组 { 12, 23, 34, 45, 56, 67, 77, 89, 90 },现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -1.代码如下: packag