稳定排序算法性能比较

冒泡排序代码:

    /**
* 冒泡排序
*
* @param arr
* @return
*/
public int[] bubbleSort(int[] arr) {
int temp;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}

直接插入排序代码:

    /**
* 直接插入排序
*
* @param arr
* @return
*/
public int[] insertSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
if (arr[i] < arr[i - 1]) {
int temp = arr[i];
int j = i;
while (j > 0 && arr[j - 1] > temp) {
arr[j] = arr[j - 1];
j--;
}
arr[j] = temp;
}
}
return arr;
}

基数排序代码:

    /**
* 基数排序,又称桶排序
*
* @param arr
* @return
*/
public int[] radixSort(int[] arr, int d) {
int k = 0;
int n = 1;
int m = 1; // 控制键值排序依据在哪一位
int[][] temp = new int[10][arr.length]; // 数组的第一维表示可能的余数0-9
int[] order = new int[10]; // 数组orderp[i]用来表示该位是i的数的个数
while (m <= d) {
for (int i = 0; i < arr.length; i++) {
int lsd = ((arr[i] / n) % 10);
temp[lsd][order[lsd]] = arr[i];
order[lsd]++;
}
for (int i = 0; i < 10; i++) {
if (order[i] != 0)
for (int j = 0; j < order[i]; j++) {
arr[k] = temp[i][j];
k++;
}
order[i] = 0;
}
n *= 10;
k = 0;
m++;
}
return arr;
}

不稳定排序算法性能比较

选择排序代码:

    /**
* 选择排序
*
* @param arr
* @return
*/
public int[] selectSort(int[] arr) {
int temp;
for (int i = 0; i < arr.length; i++) {
int minus = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[i])
minus = j;
}
if (minus != i) {
temp = arr[i];
arr[i] = arr[minus];
arr[minus] = temp;
}
}
return arr;
}

希尔排序代码:

    /**
* 希尔排序
*/
public int[] shllSort(int[] arr) {
int dk = arr.length / 2;
while (dk >= 1) {
for (int i = 0; i < dk; i++) {
for (int j = i + dk; j < arr.length; j = j + dk) {
if (arr[j] < arr[j - dk]) {
int temp = arr[j];
int k = j;
while (k > i && arr[k - dk] > temp) {
arr[k] = arr[k - dk];
k = k - dk;
}
arr[k] = temp;
}
}
}
dk = dk / 2;
} return arr;
}
}

快速排序代码:

    /**
* 快速排序
*
* @param arr
* 待排序数组
* @param left
* 待排序数组左边界
* @param right
* 待排序数组右边界
* @return
*/
public int[] quickSort(int[] arr, int left, int right) {
int temp;
if (left < right) {
int s = arr[left];
int i = left;
int j = right;
while (true) {
while (i + 1 < arr.length && arr[++i] < s)
;
while (j - 1 > -1 && arr[--j] > s)
;
if (i >= j)
break;
else {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[left] = arr[j];
arr[j] = s;
quickSort(arr, left, j - 1);
quickSort(arr, j + 1, right);
}
return arr;
} /**
* 快速排序第二种实现方式
*
* @param arr
* 待排序数组
* @param left
* 待排序数组左边界
* @param right
* 待排序数组右边界
* @return
*/
public int[] quickSort2(int[] arr, int left, int right) {
if (left < right) {
int key = arr[left];
int low = left;
int high = right;
while (low < high) {
while (high > low && arr[high] >= key)
high--;
arr[low] = arr[high];
while (low < high && arr[low] <= key)
low++;
arr[high] = arr[low];
}
arr[low] = key;
quickSort2(arr, left, low - 1);
quickSort2(arr, low + 1, right);
}
return arr;
}

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. SpringMVC过程中@RequestBody接收Json的问题 总是报415

    在SpringMVC中用@RequestBody接收Json的问题,总是报415,经过一翻查找 前台js的post: var postdata = '{"title":" ...

  2. EasyUI Datagrid 鼠标悬停显示单元格内容

    第一种方式: .js 定义函数 <script type="text/javascript"> //格式化单元格提示信息 function formatCellTool ...

  3. 【踩坑】angularJS 1.X版本中 ng-bind 指令多空格展示

    做项目的时候遇到的问题 1.问题描述 用户在表单某个值输入多个空格,例如:A     B,保存至服务器 在列表查询页面中使用bg-bind的指令单向绑定,结果展示位A B,连续的空格被替换为单个空格 ...

  4. JavaPOI处理Excel

     java处理excel,心得分享如下,如有不妥或者需要补充的地方,敬请指出,欢迎随时交流 1.加载excel,获得workbook对象 fileTemp = new File(pathOfMExce ...

  5. Ubuntu16.04+CUDA8.0+CUNN5.1+caffe+tensorflow+Theano

    title: Ubuntu 16.04+CUDA8.0+CUNN5.1+caffe+tensorflow+Theano categories: 深度学习 tags: [深度学习框架搭建] --- 前言 ...

  6. Day2 - Linux发展史

    第1章 Linux发展史 1.1 什么是操作系统 操作系统是人与计算机硬件的一个中介. 1.2 操作系统组成 操作系统类似与鸡蛋 蛋壳--------->系统中各种各样的软件 蛋清------- ...

  7. REST:JAX-RS 与 Spring

    原文:https://developer.okta.com/blog/2017/08/09/jax-rs-vs-spring-rest-endpoints 作者:Brian Demers 译者:htt ...

  8. NET .NET深入体验和实战精要

    在学习.NET之前要充分理解基础,在这里将基础的知识点一一列举. 万丈高楼平地起 1.命名空间 命名空间是一种特殊的分类机制,他将与一个特定功能集有关的所有类型都分到一起,是.避免类名冲突的一种方式 ...

  9. NHibernate教程(13)--立即加载

    本节内容 引入 立即加载 实例分析 1.一对多关系实例 2.多对多关系实例 结语 引入 通过上一篇的介绍,我们知道了NHibernate中默认的加载机制--延迟加载.其本质就是使用GoF23中代理模式 ...

  10. MySQL (五)--连接查询简介、 交叉连接、 内连接、外连接、自然连接、温馨小提示

    1 连接查询简介 将多张表(可以大于2)进行记录的连接(按照某个指定的条件进行数据拼接). 最终结果:记录数可能会有变化,字段书一定会增加(至少两张表的合并). 连接查询:join,使用方式:左表 j ...