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 < 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 < array.length; i++) {
            for (j = i, temp = array[i]; j > 0 && temp < 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 < 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 < size; i++)
            for (j = i + 1; j < 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 < array.length; i++) {
            k = i;
            for (j = i + 1; j < array.length; j++) {
                if (array[j] < 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 < size; i++) {
            for (j = i + 1, temp = array[i], pos = i; j < size; j++)
                if (temp > array[j]) {
                    temp = array[j];
                    pos = j;
                }
            array[pos] = array[i];
            array[i] = temp;
        }

return array;
    }

//希尔排序
    //    属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序
    //  排序过程:先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;
    //  然后取d2<d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止 
    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 < length; i++) {
                int temp = array[i];
                if (temp < array[i - h]) {
                    for (int j = 0; j < i; j += h) {
                        if (temp < array[j]) {
                            temp = array[j];
                            array[j] = array[i];
                            array[i] = temp;
                        }
                    }
                }
            }
        }
    }
}

转载于:https://www.cnblogs.com/hubcarl/archive/2011/04/07/2007823.html

Java 常用排序算法实现--快速排序、插入排序、选择、冒泡相关推荐

  1. 常用排序算法的c++实现(冒泡,选择,插入,堆,shell,快速,归并 )与sort()对比 - coder_xia的专栏 - 博客频道 - CSDN.NET...

    常用排序算法的c++实现(冒泡,选择,插入,堆,shell,快速,归并 )与sort()对比 - coder_xia的专栏 - 博客频道 - CSDN.NET 常用排序算法的c++实现(冒泡,选择,插 ...

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

    本文由网络资料整理而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数 ...

  3. 快速排序算法_常用排序算法之快速排序

    点击上方蓝色 "铁匠学编程" 关注我,让我们一起学习! 前天给大家分享了归并排序,但是它不是原地排序算法,需要消耗额外的内存空间,今天给大家分享的是江湖无人不知无人不晓的" ...

  4. 常用排序算法(二)快速排序

    快速排序 概要 本章介绍排序算法中的快速排序. 目录 1. 快速排序介绍 2. 快速排序图文说明 3. 快速排序的时间复杂度和稳定性 4. 快速排序实现 4.1 快速排序C实现 4.2 快速排序C++ ...

  5. c++ 快速排序_常用排序算法之快速排序

    前天给大家分享了归并排序,但是它不是原地排序算法,需要消耗额外的内存空间,今天给大家分享的是江湖无人不知无人不晓的"快排"--快速排序. 快排是小生接触开发学会的第一个排序算法 快 ...

  6. 我的Java开发学习之旅------Java经典排序算法之二分插入排序

    一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为采用折半比较,即可得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比较, ...

  7. Python实现排序算法:冒泡排序,插入排序,选择排序,快速排序,希尔排序

    2019独角兽企业重金招聘Python工程师标准>>> import sys, getopt, randomdef bubble_sort(seq):for i in range(l ...

  8. 快速排序算法_常用排序算法专题—快速排序

    黑客技术点击右侧关注,了解黑客的世界! Linux编程点击右侧关注,免费入门到精通! 程序员严选甄选正品好物,程序员生活指南! 作者丨就是彬彬呀https://www.jianshu.com/p/17 ...

  9. Java面试题整理,java常用排序算法图解

    微服务架构 ①微服务概念: ②Spring Cloud微服务架构: 海量数据处理 ①:经典的海量数据处理面试题 高可用架构 ①基于 Hystrix 实现高可用: ②限流: ③熔断: 高并发架构 ①消息 ...

最新文章

  1. [Google API](8)构建使用Google API的Java应用程序
  2. 湖南2021年计算机一级考试,2021年湖南计算机一级考试时间(4页)-原创力文档...
  3. mysql批量加逗号_批量插入数据到数据库的方式
  4. 蓝桥杯 基础训练 试题集汇总【13道】
  5. 国际:如何识别真正的程序员
  6. PyQt5 Python主对话框创建关于对话框源代码
  7. 微信小程序|area组件使用的地址数据文件
  8. iPhone 14系列贴膜曝光:将采用开孔屏方案 四边框极窄
  9. 北邮计算机机试的编译器,北邮2018计算机院考研复试机试上机题解+结果统计
  10. JavaScript学习(六十一)—json字符串的解析和JS 对象的序列化
  11. groupadd 命令
  12. Python指南--错误和异常
  13. centos linux mysql 5.5脚本全自动源码包 编译安装
  14. 阿里“拆台”,中台真的不香了?
  15. php+ci+db+debug,[PHP] Web Framework : CodeIgniter MySQL Database 使用教學
  16. 图书管理系统的E-R图和数据库模型图
  17. 开发Windows物流管理系统——(二)代码实现
  18. error: system libzip must be upgraded to version #62= 0.11【问题解决】php7编译zip报错
  19. 让摄像头脱离线的束缚:使用手机充当电脑摄像头
  20. 传奇单机版批量修改爆率. 把所有物品爆率都改成1/10, 需要的话可以自己改更高....

热门文章

  1. 编程中怎样将列表中数字排序_R编程中的列表
  2. android绘制矢量图_Android矢量可绘制
  3. log4j.properties文件示例
  4. Android Wear Hello World
  5. Python学习心得(七) 深入理解threading多线程模块
  6. IEnumerable.Select和SelectMany的区别
  7. jquery SELECT 操作
  8. #linux包之sysstat之iostat命令
  9. Android的多媒体框架OpenCore介绍
  10. 关于被忽略的转置矩阵的公式