public class ArrayOperation {

    //二分查找算法
    public static int branchSearch(int[] array, int searchNum) {
        if (array == null)
            throw new NullPointerException("Null Referrence");
        if (array.length == 0)
            throw new IllegalArgumentException("Array Length is Zero");
        int low = 0, high = array.length;
        int middle = (high + low) / 2;
        int index = -1;
        if (searchNum <</span> array[0] || searchNum > array[array.length - 1])
            return index;
        while (middle >= 0) {
            if (array[middle] == searchNum) {
                index = middle;
                break;
            }
            if (searchNum > array[middle]) {
                low = middle;
            } else {
                high = middle;
            }
            middle = (low + high) / 2;
        }

        return index;

    }

    // 快速排序
    
    public static void quickSort(int a[], int left, int right) {
        int i, j, temp;
        i = left;
        j = right;
        if (left > right)
            return;
        temp = a[left];
        while (i != j)
        {
            while (a[j] >= temp && j > i)
                j--;
            if (j > i)
                a[i++] = a[j];
            while (a[i] <= temp && j > i)
                i++;
            if (j > i)
                a[j--] = a[i];

        }
        a[i] = temp;
        quickSort(a, left, i - 1);
        quickSort(a, i + 1, right);
    }

    // 插入排序
    // 特点:用temp保存将要排序的临时值,然后把大的值插入到这个位置。
    public static int[] insert_Sort(int[] array) {
        int i, j, temp;
        for (i = 1; i <</span> array.length; i++) {
            for (j = i, temp = array[i]; j > 0 && temp <</span> array[j - 1]; j--)
                array[j] = array[j - 1];
            array[j] = temp;
        }
        return array;
    }

    // 冒泡排序
    // 特点:从第一个元素开始,如果需要交换,就一直冒泡到底,如果不需要交换,就从下一个元素开始比较
    public void bubble_Sort(int[] array, int size) {
        int i, j, temp;
        for (i = size - 1; i > 1; i--)
            for (j = 0; j <</span> i; j++)
                if (array[j] > array[j + 1]) {
                    temp = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = temp;
                }
    }

    // 交换排序
    // 特点:始终是第一个元素与其他元素一一比较,交互后,继续用第一个元素与后面元素一一比较,重复下去。
    public int[] change_Sort(int[] array, int size) {
        int i, j, temp;
        for (i = 0; i <</span> size; i++)
            for (j = i + 1; j <</span> size; j++)
                if (array[i] > array[j]) {
                    temp = array[j];
                    array[j] = array[i];
                    array[i] = temp;
                }
        return array;
    }

    // 选择排序一(便于区分:咱就叫:选择最小值排序法)
    // 特点:分有序区(第一个元素)和无序区(除第一元素外的元素),从无序区找出最小的元素移动到有序区
    public void SelectSort(int[] array) {
        int i, j, k;// 分别为有序区,无序区,无序区最小元素指针
        for (i = 0; i <</span> array.length; i++) {
            k = i;
            for (j = i + 1; j <</span> array.length; j++) {
                if (array[j] <</span> array[k])
                    k = j;
            }
            if (k != i)// 若发现最小元素,则移动到有序区
            {
                int temp = array[k];
                array[k] = array[i];
                array[i] = array[temp];
            }
        }
    }

    // 选择排序二
    public int[] select_Sort(int[] array, int size) {
        int i, j, temp, pos;
        for (i = 0; i <</span> size; i++) {
            for (j = i + 1, temp = array[i], pos = i; j <</span> size; j++)
                if (temp > array[j]) {
                    temp = array[j];
                    pos = j;
                }
            array[pos] = array[i];
            array[i] = temp;
        }

        return array;
    }

    //希尔排序
    //    属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序
    //  排序过程:先取一个正整数d1
    //  然后取d2
    public static void ShellSort(int[] array) {
        int length = array.length;
        for (int h = length / 2; h > 0; h = h / 2) {
            // here is insert sort
            for (int i = h; i <</span> length; i++) {
                int temp = array[i];
                if (temp <</span> array[i - h]) {
                    for (int j = 0; j <</span> i; j += h) {
                        if (temp <</span> array[j]) {
                            temp = array[j];
                            array[j] = array[i];
                            array[i] = temp;
                        }
                    }
                }
            }
        }
    }
}

Java 常用排序算法实现--快速排序、插入排序、选择、冒泡的更多相关文章

  1. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  2. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  3. Java常用排序算法及性能测试集合

    测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...

  4. Java常见排序算法之折半插入排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  5. Java常见排序算法之直接插入排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  6. Java常见排序算法之快速排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  7. 常用排序算法之——快速排序(C语言+VC6.0平台)

    经典排序算法中快速排序具有较好的效率,但其实现思路相对较难理解. #include<stdio.h> int partition(int num[],int low,int high) / ...

  8. [转]Java 常用排序算法/程序员必须掌握的 8大排序算法

    本文转自:http://www.cnblogs.com/qqzy168/archive/2013/08/03/3219201.html 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插 ...

  9. <转>Java 常用排序算法小记

    排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料. 废话不多说,下面逐一看看经典的排序算法: 1. 选择排序 选择排序的基本思想是遍历数组的过 ...

随机推荐

  1. 027 hibernate查询语言(HQL)

    概述:数据查询与检索是Hibernate中的一个亮点,相对其他ORM实现而言,Hibernate提供了灵活多样的查询机制. 标准化对象查询(Criteria Query):以对象的方式进行查询,将查询 ...

  2. 关于win10和sqlserver的兼容性

    本人主要是用.NET开发一些MIS(信息管理系统)系统,如酒店管理系统,医院管理系统,以及其附属的如餐饮管理系统,洗浴管理系统,以及医保管理系统,合疗管理系统,前期开发的产品主要是VS2008+sql ...

  3. Zepto源码分析-动画(fx fx_method)模块

    源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...

  4. PHP科普

    1.PHP是什么意思? 超文本预处理器(Hypertext Preprocessor) 2.PHP是干什么用的? PHP是一种通用开源脚本语言.语法吸收了C语言.Java和Perl(实际抽取与汇报语言 ...

  5. jquery中html、text、val回调函数

    先扫盲: 摘自菜鸟教程:jQuery 方法:text().html() 以及 val()拥有回调函数. 回调函数有两个参数:被选元素列表中当前元素的下标,以及原始(旧的)值.然后以函数新值返回您希望使 ...

  6. 01--数据库MySQL:【数据库DB】和【数据库管理系统DBMS】 简介

    1.数据库DB 数据库:DB(DataBase) 按照一定规则存储在计算机的内部存储设备上被各种用户或者应用共享的数据集合 2.数据库管理系统DBMS 1)数据库管理系统DBMS:DBMS(DataB ...

  7. 看过WWDC2017的闲谈

    2017年6月6日凌晨的138分钟,是属于WWDC2017的. 鉴于时间问题,没有熬夜看,所以早上起来趁着公司不太忙就看了看.整体的内容没有太多变化,依然是苹果的主产品,不过这次的one more t ...

  8. cpp(第十章)

    1. const class & func(const class &) const { do something.. } 第一个const返回后的类不允许被赋值,第二个const不允 ...

  9. 用hmmlearn学习隐马尔科夫模型HMM

    在之前的HMM系列中,我们对隐马尔科夫模型HMM的原理以及三个问题的求解方法做了总结.本文我们就从实践的角度用Python的hmmlearn库来学习HMM的使用.关于hmmlearn的更多资料在官方文 ...

  10. windows7 64bit下mvn命令后提示‘cmd’不是内部或外部命令,也不是可执行程序或批处理文件

    首先,开命令提示符,输入如下命令试试echo %M2_HOME% 回车如果显示的路径和安装路径一致说明配置没问题; 那么出现这个问题的原因可能就是路径问题,可能是你安装了某个软件更改了系统映射路径导致 ...