最近温习算法,花点时间写了点代码验证下,在这里做个存档。

 package com.chrischeng.hacker;

 import java.util.*;

 /**
* Created by Yexin on 2016/11/4.
*/ //Complete the code
public class Solution
{
private final static int ARRAYSIZE = 50;
private final static int ARRAYRANGE = ARRAYSIZE * 2; // 通过随机数发生器生成一个指定大小的随机数组
public static int[] createArray(int size){
int []retArray = new int [size];
Random random = new Random();
for(int i = 0;i < size;i++)
retArray[i] = random.nextInt(ARRAYRANGE);
return retArray;
} // 打印指定数组
public static void printArray(int []arr){
for(int a : arr)
System.out.print(a + " ");
System.out.println();
} // 交换数组中指定序号的元素值
public static void swap(int[] arr, int i, int j ){
if(i >= arr.length || j >= arr.length)
return;
else{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
} // 使用带有标志位的冒泡排序
public static void bubbleSort(int []arr){
int len = arr.length;
boolean flag = false;
for(int i = 0; i < len - 1; i++){
for(int j = i + 1; j < len;j++){
if(arr[i] > arr[j]) {
swap(arr, i, j);
flag = true;
}
}
if(flag == false)
break;
}
} // 直接插入排序
public static void insertionSort(int []arr){
int len = arr.length, i = 1, j;
for(; i < len; i++){
int temp = arr[i];
if(arr[i - 1] > arr[i]){
j = i - 1;
while(j >= 0 && arr[j] > temp) {
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
}
}
} // Shell排序(本质上就是分治法的直接插入排序)
public static void shellSort(int []arr){
int len = arr.length, gap, i, j;
for(gap = len/2; gap > 0; gap /= 2){
for(i = gap;i < len; i++){
if(arr[i] < arr[i -gap]){
int temp = arr[i];
j = i - gap;
while(j >= 0 && arr[j] > temp){
arr[j+gap] = arr[j];
j -= gap;
}
arr[j+gap] = temp;
}
}
}
} // 快速排序
public static void quickSort(int []arr, int l, int r){
if(l < r) {
int i = l, j = r, base = arr[r];
while (i < j) {
// 由左至右遍历,找到第一个大于中轴的元素
while (i < j && arr[i] < base)
i++;
// 如果i和j没有交叉且找到了第一个大于中轴的元素(index为i),则将它的值存放在j的位置,而j位置的值存放在base中
if (i < j)
arr[j--] = arr[i];
// 从右到左遍历,找到第一个小于中轴的元素
while (i < j && arr[j] > base)
j--;
// 如果i和j没有交叉且找到了第一个小于中轴的元素,则将他的值存放在上一步中index-i的位置上
if (i < j)
arr[i++] = arr[j];
}
// 上面的遍历完成后,i左侧都是小于base的元素,右侧都是大于base的元素,base作为中值存放在index=i的位置上,并不参与下次排序
arr[i] = base;
// 分别对数组左右侧进行递归排序
quickSort(arr,l,i-1);
quickSort(arr,i+1,r);
}
} // 桶排序
// 本质上其实就是彻底的牺牲空间换取时间的做法
// 适用于数字范围在一定区间内的随机数组
public static void bucketSort(int arr[]){
// 此处之所以使用对象数组,是因为实际情况中存在多个同值元素存在的可能性
ArrayList<Integer> buckets[] = new ArrayList[ARRAYRANGE + 1];
for(int i : arr) {
if (buckets[i] == null)
buckets[i] = new ArrayList<Integer>();
buckets[i].add(new Integer(i));
}
int index = 0;
for(ArrayList<Integer> al : buckets){
if(null != al && al.size() > 0){
for(Integer i : al)
arr[index++] = i;
}
}
} // 基数排序
// 本质上就是按照从低位到高位的桶排序,所以无论随机数组的长度为多大,永远只需要十个桶
public static void radixSort(int arr[]){
} public static void main(String[] args){
int [] arr = createArray(ARRAYSIZE);
printArray(arr);
bucketSort(arr);
printArray(arr);
}
}

主要排序算法的Java实现的更多相关文章

  1. 常见排序算法(附java代码)

    常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...

  2. 几大排序算法的Java实现

    很多的面试题都问到了排序算法,中间的算法和思想比较重要,这边我选择了5种常用排序算法并用Java进行了实现.自己写一个模板已防以后面试用到.大家可以看过算法之后,自己去实现一下. 1.冒泡排序:大数向 ...

  3. 7种基本排序算法的Java实现

    7种基本排序算法的Java实现 转自我的Github 以下为7种基本排序算法的Java实现,以及复杂度和稳定性的相关信息. 以下为代码片段,完整的代码见Sort.java 插入排序 /** * 直接插 ...

  4. 几种简单的排序算法(JAVA)

    几种排序算法(JAVA) 一.代码 package com.hdwang; import java.util.Arrays; /** * Created by admin on 2017/1/20. ...

  5. 常见排序算法总结 -- java实现

    常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间 ...

  6. 几大排序算法的Java实现(原创)

    几大排序算法的Java实现 更新中... 注: 该类中附有随机生成[min, max)范围不重复整数的方法,如果各位看官对此方法有什么更好的建议,欢迎提出交流. 各个算法的思路都写在该类的注释中了,同 ...

  7. 十大经典排序算法(java实现、配图解,附源码)

    前言: 本文章主要是讲解我个人在学习Java开发环境的排序算法时做的一些准备,以及个人的心得体会,汇集成本篇文章,作为自己对排序算法理解的总结与笔记. 内容主要是关于十大经典排序算法的简介.原理.动静 ...

  8. 基本排序算法——冒泡排序java实现

    冒泡排序是原理最简单的一种排序算法,具体思想就不多说了,代码如下: eclipse4.3中编译通过 package sort.basic; import java.util.Arrays; publi ...

  9. 排序算法练习--JAVA(插入、直接选择、冒泡、快速排序、非递归快速排序)

    排序算法是数据结构中的经典算法知识点,也是笔试面试中经常考察的问题,平常学的不扎实笔试时候容易出洋相,回来恶补,尤其是碰到递归很可能被问到怎么用非递归实现... package sort; impor ...

  10. 排序算法(JAVA)

    import java.util.Random;      /**  * 排序测试类  *   * 排序算法的分类如下:  * 1.插入排序(直接插入排序.折半插入排序.希尔排序):  * 2.交换排 ...

随机推荐

  1. 使用了UnityEditor中的API,打包时却不能打包UnityEditor的问题

    前段时间写了一篇名叫<Unity使用Windows弹窗保存图片>的文章 然而现在项目进入了测试阶段 就在发布的时候,这个地方出问题了 问题出在using UnityEditor; 如上文章 ...

  2. php中表单提交复选框与下拉列表项

    在赶项目中,抽出半个小时来写篇博客吧,这个功能说实话不难,为什么要写呢,因为在复选框那里有小小的难点,我试了好多遍才试成功的,希望能为以后需要帮助的同学提供点思路. 先看一下我做的效果吧 就是给每个业 ...

  3. RocketMQ与Kafka对比

    转自:https://github.com/alibaba/RocketMQ/wiki/rmq_vs_kafka 淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用MySQL作为消息存 ...

  4. 关于“foreach循环”中遇到的几个问题总结

    1.列表页面用"foreach循环"的时候数据没有显示,此时需要检查你对象模型中属性的首字母是否大写,切记不能大写(本人在做一个项目的时候,对象模型是别人建立的,属性首字母大写了, ...

  5. [故障公告]14:39-15:39博客站点部分负载均衡遭遇3次20G以上的流量攻击

      非常抱歉,今天下午14:39-15:39左右,博客站点的部分负载均衡遭遇3次20G以上的流量攻击,造成很多用户不能正常访问.由此给您带来麻烦,请您谅解. 攻击的过程是这样的: 14:39,第1次攻 ...

  6. Android的cookie的接收和发送

    我在做自动登录的时候遇到的坑,特写此文以提醒各位不要把自己绕进去了. 我们都知道在web端的cookie是可以通过服务器端设置保存的,默认是关闭浏览器就清除cookie的,但是可以在服务器端设置coo ...

  7. [笔记]我的Linux入门之路 - 04.Eclipse安装

    首先,要安装ecliose自然是先要有Java环境.在上一篇已经安装好了,不再赘述. 一.下载 Eclipse官网 下载下来的文件":eclipse-inst-linux64.tar.gz ...

  8. JAVA 基础之Integer

    jdk1.5后增加了自动拆箱和自动装箱特性.java的八种 byte,short,int,long,float,double,char,boolean基本类型和各自对应的包装类型的相互转化. 装箱指的 ...

  9. 导入csv文件到数据库

    csv:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本意味着该文件是一个字符 ...

  10. 数组的重排序方法reverse()和sort()

    js数组中存在两个可以直接用来重排序的方法:reverse()和sort(). reverse()方法比较简单,直接反转数组项的顺序: var arr = [1, 3, 2, 4, 5]; arr.r ...