`
umgsai
  • 浏览: 103695 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

快速排序&二分查找代码实现

阅读更多
/**
 *
 * @author shangyidong
 * @version $Id: BinarySearch.java, v 0.1 2019年05月12日 下午4:53 shangyidong Exp $
 */
public class BinarySearchTest {

    public static void quickSort(int a[], int left, int right) {
        if (left >= right) {
            return;
        }
        int temp = a[left];
        int i = left;
        int j = right;
        while (i != j) {
            while (i < j && a[j] >= temp) {
                j--;
            }
            if (i < j) {
                int t = a[j];
                a[j] = a[i];
                a[i] = t;
            }
            while (i < j && a[i] <= temp) {
                i++;
            }
            if (i < j) {
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
        quickSort(a, left, j - 1);
        quickSort(a, i + 1, right);
    }

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

    public static void main(String[] args) {
        int a[] = new int[10];
        System.out.print("原始数组:");
        for (int i = 0; i < 10; i++) {
            a[i] = new Random().nextInt(100);
            System.out.print(a[i] + "  ");
        }
        System.out.println();

        quickSort(a, 0, a.length - 1);
        System.out.print("排序后:");

        for (int i = 0; i < 10; i++) {
            System.out.print(a[i] + "  ");
        }
        System.out.println();
        for (int i = 0; i < 10; i++) {
            int key = a[i];
            System.out.print("查找key=" + key);
            System.out.println(",key下标" + binarySearch(a, key));
        }
    }
}

 

原始数组:82  0  19  20  23  42  56  15  34  52  

排序后:0  15  19  20  23  34  42  52  56  82  

查找key=0,key下标0

查找key=15,key下标1

查找key=19,key下标2

查找key=20,key下标3

查找key=23,key下标4

查找key=34,key下标5

查找key=42,key下标6

查找key=52,key下标7

查找key=56,key下标8

查找key=82,key下标9

分享到:
评论

相关推荐

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

    题目:首先产生随机数,再进行快速排序,再进行二分查找。 实现代码: #include #include #include void quiksort(int a[],int low,int high) { int i = low; int j = high; int temp = a[i]; if( low ...

    排序和查找实现适配器模式

    ) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch (int[], int)方法实现了二分查找算法。现使用适配器模式设计一个系统,在不修改源代码...

    二分搜索算法、快速排序,算法分析与设计(完整的代码,结合例题详细解析) 全套资源,求抱走!!!

    二分搜索算法、快速排序,算法分析与设计(完整的代码,结合例题详细解析) 全套资源,求抱走!!! 1、给定数组a[0 : 8]={1, 8, 12, 15, 16, 21, 30, 35, 39}。采用二分搜索算法完成下述任务: 1)查找是否有元素30...

    c语言实现快速排序(逐步优化)

    c语言实现的快速排序算法,及其一步步优化代码(1. 数组长度较小时候选择插入排序;2. 主元在数组最左最右,中间三个数字中间选择中间大小的, 数组拆分后将 重复数字挪到主元附近,不进行重复partition)

    C语言使用stdlib.h库函数的二分查找和快速排序的实现代码

    以下是对C语言使用stdlib.h库函数的二分查找和快速排序的实现代码进行了详细的介绍,需要的朋友可以过来参考下。希望对大家有所帮助

    C语言查找排序算法源码大全

    二分查找(非递归) &lt;*******\n"); printf("\t***********&gt; 3.二分查找(递归) &lt;*******\n"); printf("\t***********&gt; 4,直接插入排序 &lt;*******\n"); printf("\t***********&gt; 5.直接选择排序 &lt;*******\n"); ...

    数据结构和算法必知必会的50个代码实现

    * 实现一个有序数组的二分查找算法* 实现模糊二分查找算法(比如大于等于给定值的第一个元素) ## 散列表* 实现一个基于链表法解决冲突问题的散列表* 实现一个LRU缓存淘汰算法 ## 字符串 ## 二叉树 ## 堆 ## 图 ##...

    检索排序部分代码

    代码包括顺序、二分、哈希查找、以及选择、直接、冒泡、快速排序

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

    二分查找法(Binary Search) 二分搜索树基础 二分搜索树的节点插入 二分搜索树的查找 二分搜索树的遍历(深度优先遍历) 层序遍历(广度优先遍历) 删除最大值, 最小值 二分搜索树节点的删除 floor和ceil的实现 并查集 ...

    python 二分查找和快速排序实例详解

    思想简单,细节颇多;本以为很简单的两个小程序,写起来发现bug频出,留此纪念。 #usr/bin/env python def binary_search(lst,t): low=0 height=len(lst)-1 quicksort(lst,0,height) print lst ...

    9个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等.rar

    课程设计教程包含了10个数据结构相关的实例,涵盖了二叉树的建立和遍历、冒泡排序、快速排序等内容。以下是每个实例的简介: ...10. 查找.c:介绍了常见的查找算法,包括顺序查找、二分查找和哈希查找

    算法图解的算法源代码(包含各种不同语言的实现)

    算法图解的源代码,包含各种不同语言的算法实现方法,具体算法包括:二分查找的方式和实现、选择排序实现、递归实现、快速排序实现、散列表实现、广度优先搜索实现、最短路径算法实现、贪婪算法解析、动态规划等一...

    常用算法原理及其代码

    包含Bit-map、堆排序、二分查找、哈希表、快速排序等算法的原理及其C实现代码

    C++ 基数排序的实现实例代码

    对于如二分查找等算法,要求输入是有序的序列,也就是要先排序后查找,由此可见排序算法的重要性.  广为人知的排序算法有冒泡排序,还有选择排序,插入排序.高级一些的有快速排序,希尔排序,堆排序,归并排序,基数排序等. ...

    华南 数据结构上机实验代码 完整代码

    二分查找 哈希查找 直接插入排序 折半插入排序 希尔(shell)排序 冒泡排序 快速排序 简单选择排序 堆排序 归并排序(非递归算法) 基数排序 实现图的存储结构 图的深度遍历 图的广度遍历 二叉排序树的...

    基于Python实现的数据结构与算法完整源代码+超详细注释(包含46个作业项目).zip

    20_二分查找 21_冒泡排序和选择排序 22_插入排序 23_希尔排序 24_归并排序 25_快速排序 26_Hash散列&ADT Map 27_树的嵌套列表实现 28_树结构的节点链接法实现 29_表达式解析树 30_树的遍历 31_python实现ADT ...

    数据结构_day05_排序算法

    排序算法排序排序算法的稳定性冒泡排序冒泡排序的分析代码体现冒泡排序的...快速排序代码体现时间复杂度归并排序归并算法的分析归并算法的代码体现归并排序的时间复杂度二分查找二分查找程序分析二分查找代码时间复杂度...

    算法分析代码及演示

    常用算法代码及演示。顺序查找,二分查找,哈希表,选择法排序,冒泡发排序,插入发排序,希尔排序,快速排序。

Global site tag (gtag.js) - Google Analytics