稳定排序算法性能比较

冒泡排序代码:

  1. /**
  2. * 冒泡排序
  3. *
  4. * @param arr
  5. * @return
  6. */
  7. public int[] bubbleSort(int[] arr) {
  8. int temp;
  9. for (int i = 0; i < arr.length; i++) {
  10. for (int j = 0; j < arr.length - i - 1; j++) {
  11. if (arr[j] > arr[j + 1]) {
  12. temp = arr[j];
  13. arr[j] = arr[j + 1];
  14. arr[j + 1] = temp;
  15. }
  16. }
  17. }
  18. return arr;
  19. }

直接插入排序代码:

  1. /**
  2. * 直接插入排序
  3. *
  4. * @param arr
  5. * @return
  6. */
  7. public int[] insertSort(int[] arr) {
  8. for (int i = 1; i < arr.length; i++) {
  9. if (arr[i] < arr[i - 1]) {
  10. int temp = arr[i];
  11. int j = i;
  12. while (j > 0 && arr[j - 1] > temp) {
  13. arr[j] = arr[j - 1];
  14. j--;
  15. }
  16. arr[j] = temp;
  17. }
  18. }
  19. return arr;
  20. }

基数排序代码:

  1. /**
  2. * 基数排序,又称桶排序
  3. *
  4. * @param arr
  5. * @return
  6. */
  7. public int[] radixSort(int[] arr, int d) {
  8. int k = 0;
  9. int n = 1;
  10. int m = 1; // 控制键值排序依据在哪一位
  11. int[][] temp = new int[10][arr.length]; // 数组的第一维表示可能的余数0-9
  12. int[] order = new int[10]; // 数组orderp[i]用来表示该位是i的数的个数
  13. while (m <= d) {
  14. for (int i = 0; i < arr.length; i++) {
  15. int lsd = ((arr[i] / n) % 10);
  16. temp[lsd][order[lsd]] = arr[i];
  17. order[lsd]++;
  18. }
  19. for (int i = 0; i < 10; i++) {
  20. if (order[i] != 0)
  21. for (int j = 0; j < order[i]; j++) {
  22. arr[k] = temp[i][j];
  23. k++;
  24. }
  25. order[i] = 0;
  26. }
  27. n *= 10;
  28. k = 0;
  29. m++;
  30. }
  31. return arr;
  32. }

不稳定排序算法性能比较

选择排序代码:

  1. /**
  2. * 选择排序
  3. *
  4. * @param arr
  5. * @return
  6. */
  7. public int[] selectSort(int[] arr) {
  8. int temp;
  9. for (int i = 0; i < arr.length; i++) {
  10. int minus = i;
  11. for (int j = i + 1; j < arr.length; j++) {
  12. if (arr[j] < arr[i])
  13. minus = j;
  14. }
  15. if (minus != i) {
  16. temp = arr[i];
  17. arr[i] = arr[minus];
  18. arr[minus] = temp;
  19. }
  20. }
  21. return arr;
  22. }

希尔排序代码:

  1. /**
  2. * 希尔排序
  3. */
  4. public int[] shllSort(int[] arr) {
  5. int dk = arr.length / 2;
  6. while (dk >= 1) {
  7. for (int i = 0; i < dk; i++) {
  8. for (int j = i + dk; j < arr.length; j = j + dk) {
  9. if (arr[j] < arr[j - dk]) {
  10. int temp = arr[j];
  11. int k = j;
  12. while (k > i && arr[k - dk] > temp) {
  13. arr[k] = arr[k - dk];
  14. k = k - dk;
  15. }
  16. arr[k] = temp;
  17. }
  18. }
  19. }
  20. dk = dk / 2;
  21. }
  22.  
  23. return arr;
  24. }
  25. }

快速排序代码:

  1. /**
  2. * 快速排序
  3. *
  4. * @param arr
  5. * 待排序数组
  6. * @param left
  7. * 待排序数组左边界
  8. * @param right
  9. * 待排序数组右边界
  10. * @return
  11. */
  12. public int[] quickSort(int[] arr, int left, int right) {
  13. int temp;
  14. if (left < right) {
  15. int s = arr[left];
  16. int i = left;
  17. int j = right;
  18. while (true) {
  19. while (i + 1 < arr.length && arr[++i] < s)
  20. ;
  21. while (j - 1 > -1 && arr[--j] > s)
  22. ;
  23. if (i >= j)
  24. break;
  25. else {
  26. temp = arr[i];
  27. arr[i] = arr[j];
  28. arr[j] = temp;
  29. }
  30. }
  31. arr[left] = arr[j];
  32. arr[j] = s;
  33. quickSort(arr, left, j - 1);
  34. quickSort(arr, j + 1, right);
  35. }
  36. return arr;
  37. }
  38.  
  39. /**
  40. * 快速排序第二种实现方式
  41. *
  42. * @param arr
  43. * 待排序数组
  44. * @param left
  45. * 待排序数组左边界
  46. * @param right
  47. * 待排序数组右边界
  48. * @return
  49. */
  50. public int[] quickSort2(int[] arr, int left, int right) {
  51. if (left < right) {
  52. int key = arr[left];
  53. int low = left;
  54. int high = right;
  55. while (low < high) {
  56. while (high > low && arr[high] >= key)
  57. high--;
  58. arr[low] = arr[high];
  59. while (low < high && arr[low] <= key)
  60. low++;
  61. arr[high] = arr[low];
  62. }
  63. arr[low] = key;
  64. quickSort2(arr, left, low - 1);
  65. quickSort2(arr, low + 1, right);
  66. }
  67. return arr;
  68. }

Java实现基本排序算法的更多相关文章

  1. Java中的排序算法(2)

    Java中的排序算法(2) * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists). * 步骤为: * 1. 从数 ...

  2. java实现各种排序算法

    java实现各种排序算法 import java.util.Arrays; public class SomeSort { public static void main(String[] args) ...

  3. Java实现常见排序算法

    常见的排序算法有冒泡排序.选择排序.插入排序.堆排序.归并排序.快速排序.希尔排序.基数排序.计数排序,下面通过Java实现这些排序 1.冒泡排序 package com.buaa; import j ...

  4. Java数组的排序算法

    在Java中,实现数组的排序算法有很多,如冒泡排序法.选择排序法.直接插入法和快速排序法等.下面介绍几种排序算法的具体 实现. 本文引用文献:Java必须知道的300个问题. 1.冒泡排序法 1.1 ...

  5. java实现八大排序算法

    Arrays.sort() 采用了2种排序算法 -- 基本类型数据使用快速排序法,对象数组使用归并排序. java的Collections.sort算法调用的是归并排序,它是稳定排序 方法一:直接插入 ...

  6. java实现折半排序算法

    折半插入排序法,又称二分插入排序法,是直接插入排序法的改良版,也需要执行i-1趟插入,不同之处在于,第i趟插入,先找出第i+1个元素应该插入的的位置,假定前i个数据是已经处于有序状态. 折半插入排序( ...

  7. JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  8. Java版各种排序算法 (冒泡,快速,选择,插入)

    package com.test4; import java.util.*; //Calendar 显示时间 /** * @author qingfeng * 功能:排序算法 */ public cl ...

  9. Java学习笔记——排序算法之快速排序

    会当凌绝顶,一览众山小. --望岳 如果说有哪个排序算法不能不会,那就是快速排序(Quick Sort)了 快速排序简单而高效,是最适合学习的进阶排序算法. 直接上代码: public class Q ...

  10. Java学习笔记——排序算法之希尔排序(Shell Sort)

    落日楼头,断鸿声里,江南游子.把吴钩看了,栏杆拍遍,无人会,登临意. --水龙吟·登建康赏心亭 希尔算法是希尔(D.L.Shell)于1959年提出的一种排序算法.是第一个时间复杂度突破O(n²)的算 ...

随机推荐

  1. 初次搭建vue环境(最基础的)

    一直以来觉得搭建环境是自己的短板,恰巧老大跟我说他刚才面试一个有4年工作经验的人,给那面试的人出了到机试题,给了1小时的时间连环境都没搭好.且不说那人的工作经验是否掺有水分,自己还是有点尴尬的,以前的 ...

  2. Spring(一)之IOC、bean、注入

    [TOC] spring简介 首先它是一个开源的.用来简化企业级应用开发的框架. Spring为编写企业应用程序提供了轻量的解决方案,同时仍然支持使用声明式事务. 用RMI或web service远程 ...

  3. java中Object转String

      Object转为String的几种形式 在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object.toStri ...

  4. eclipse导入SVN上的Maven多模块项目

    eclipse导入SVN上的Maven多模块项目 博客分类: Eclipse&MyEclipse SVN Maven   一.SVN上Maven多模块项目结构 使用eclipse导入SVN上的 ...

  5. 每次打开VS都报错:我们无法自动填充你的 Visual Studio Team Services 帐户

    我们无法自动填充你的 Visual Studio Team Services 帐户.遇到下面的错误: TF400813: Resource not available for anonymous ac ...

  6. 写给后端的前端笔记:浮动(float)布局

    写给后端的前端笔记:浮动(float)布局 这篇文章主要面向后端人员,对前端有深刻了解的各位不喜勿喷. 起因 前一阵子我一个后端的伙伴问我,"前端的左飘怎么做?",我立马就懵了,& ...

  7. node.js后台快速搭建在阿里云(一)(express篇)

    前期准备 阿里云服务器 node.js pm2 express nginx linux(推荐教程:鸟哥的私房菜) 简介 嗯……我只是个前端而已 前段时间写过一个.net mvc的远程发布,关于.net ...

  8. Linux上Oracle自动启停方案

    环境 CentOS 6 x86_64, Oracle 11g R2   方案 Oracle在$ORACLE_HOME/bin目录下提供了dbstart和dbshut两个脚本来启动和停止Oracle.d ...

  9. css 找到隐藏元素个数

    <form>   <input type="hidden" name="email" />   <input type=" ...

  10. IT团队之非正式沟通

      沟通能力是一种能证明和让对方发现你具有社会工作能力的能力.从表面上看来,它只是一种能说会道的能力,可实际上它却包罗了一个人从穿衣打扮到言谈举止等一切行为的能力.   从大体上,我将沟通分为正式沟通 ...