曾经学数据结构的时候,各种排序练的很熟,但是想过用Java怎么实现吗,以下给出来给你看看,当然闲着就当学习数据结构了,因为jdk提供的工具足够你应付所有事情。

插入排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class InsertSort implements SortUtil.Sort{

public void sort(int[] data) {

int temp;

for(int i=1;i<data.length;i++){

for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){

SortUtil.swap(data,j,j-1);

}

}

}

}

冒泡排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class BubbleSort implements SortUtil.Sort{

public void sort(int[] data) {

int temp;

for(int i=0;i<data.length;i++){

for(int j=data.length-1;j>i;j--){

if(data[j]<data[j-1]){

SortUtil.swap(data,j,j-1);

}

}

}

}

}

选择排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class SelectionSort implements SortUtil.Sort {

public void sort(int[] data) {

int temp;

for (int i = 0; i < data.length; i++) {

int lowIndex = i;

for (int j = data.length - 1; j > i; j--) {

if (data[j] < data[lowIndex]) {

lowIndex = j;

}

}

SortUtil.swap(data,i,lowIndex);

}

}

}

Shell排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class ShellSort implements SortUtil.Sort{

public void sort(int[] data) {

for(int i=data.length/2;i>2;i/=2){

for(int j=0;j<i;j++){

insertSort(data,j,i);

}

}

insertSort(data,0,1);

}

private void insertSort(int[] data, int start, int inc) {

int temp;

for(int i=start+inc;i<data.length;i+=inc){

for(int j=i;(j>=inc)&&(data[j]<data[j-inc]);j-=inc){

SortUtil.swap(data,j,j-inc);

}

}

}

}

快速排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class QuickSort implements SortUtil.Sort{

public void sort(int[] data) {

quickSort(data,0,data.length-1);

}

private void quickSort(int[] data,int i,int j){

int pivotIndex=(i+j)/2;

//swap

SortUtil.swap(data,pivotIndex,j);

int k=partition(data,i-1,j,data[j]);

SortUtil.swap(data,k,j);

if((k-i)>1) quickSort(data,i,k-1);

if((j-k)>1) quickSort(data,k+1,j);

}

private int partition(int[] data, int l, int r,int pivot) {

do{

while(data[++l]<pivot);

while((r!=0)&&data[--r]>pivot);

SortUtil.swap(data,l,r);

}

while(l<r);

SortUtil.swap(data,l,r);

return l;

}

}

改进后的快速排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class ImprovedQuickSort implements SortUtil.Sort {

private static int MAX_STACK_SIZE=4096;

private static int THRESHOLD=10;

public void sort(int[] data) {

int[] stack=new int[MAX_STACK_SIZE];

int top=-1;

int pivot;

int pivotIndex,l,r;

stack[++top]=0;

stack[++top]=data.length-1;

while(top>0){

int j=stack[top--];

int i=stack[top--];

pivotIndex=(i+j)/2;

pivot=data[pivotIndex];

SortUtil.swap(data,pivotIndex,j);

//partition

l=i-1;

r=j;

do{

while(data[++l]<pivot);

while((r!=0)&&(data[--r]>pivot));

SortUtil.swap(data,l,r);

}

while(l<r);

SortUtil.swap(data,l,r);

SortUtil.swap(data,l,j);

if((l-i)>THRESHOLD){

stack[++top]=i;

stack[++top]=l-1;

}

if((j-l)>THRESHOLD){

stack[++top]=l+1;

stack[++top]=j;

}

}

//new InsertSort().sort(data);

insertSort(data);

}

private void insertSort(int[] data) {

int temp;

for(int i=1;i<data.length;i++){

for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){

SortUtil.swap(data,j,j-1);

}

}

}

}

归并排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class MergeSort implements SortUtil.Sort{

public void sort(int[] data) {

int[] temp=new int[data.length];

mergeSort(data,temp,0,data.length-1);

}

private void mergeSort(int[] data,int[] temp,int l,int r){

int mid=(l+r)/2;

if(l==r) return ;

mergeSort(data,temp,l,mid);

mergeSort(data,temp,mid+1,r);

for(int i=l;i<=r;i++){

temp=data;

}

int i1=l;

int i2=mid+1;

for(int cur=l;cur<=r;cur++){

if(i1==mid+1)

data[cur]=temp[i2++];

else if(i2>r)

data[cur]=temp[i1++];

else if(temp[i1]<temp[i2])

data[cur]=temp[i1++];

else

data[cur]=temp[i2++];

}

}

}

改进后的归并排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class ImprovedMergeSort implements SortUtil.Sort {

private static final int THRESHOLD = 10;

public void sort(int[] data) {

int[] temp=new int[data.length];

mergeSort(data,temp,0,data.length-1);

}

private void mergeSort(int[] data, int[] temp, int l, int r) {

int i, j, k;

int mid = (l + r) / 2;

if (l == r)

return;

if ((mid - l) >= THRESHOLD)

mergeSort(data, temp, l, mid);

else

insertSort(data, l, mid - l + 1);

if ((r - mid) > THRESHOLD)

mergeSort(data, temp, mid + 1, r);

else

insertSort(data, mid + 1, r - mid);

for (i = l; i <= mid; i++) {

temp = data;

}

for (j = 1; j <= r - mid; j++) {

temp[r - j + 1] = data[j + mid];

}

int a = temp[l];

int b = temp[r];

for (i = l, j = r, k = l; k <= r; k++) {

if (a < b) {

data[k] = temp[i++];

a = temp;

} else {

data[k] = temp[j--];

b = temp[j];

}

}

}

private void insertSort(int[] data, int start, int len) {

for(int i=start+1;i<start+len;i++){

for(int j=i;(j>start) && data[j]<data[j-1];j--){

SortUtil.swap(data,j,j-1);

}

}

}

}

堆排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class HeapSort implements SortUtil.Sort{

public void sort(int[] data) {

MaxHeap h=new MaxHeap();

h.init(data);

for(int i=0;i<data.length;i++)

h.remove();

System.arraycopy(h.queue,1,data,0,data.length);

}

private static class MaxHeap{

void init(int[] data){

this.queue=new int[data.length+1];

for(int i=0;i<data.length;i++){

queue[++size]=data;

fixUp(size);

}

}

private int size=0;

private int[] queue;

public int get() {

return queue[1];

}

public void remove() {

SortUtil.swap(queue,1,size--);

fixDown(1);

}

//fixdown

private void fixDown(int k) {

int j;

while ((j = k << 1) <= size) {

if (j < size && queue[j]<queue[j+1])

j++;

if (queue[k]>queue[j]) //不用交换

break;

SortUtil.swap(queue,j,k);

k = j;

}

}

private void fixUp(int k) {

while (k > 1) {

int j = k >> 1;

if (queue[j]>queue[k])

break;

SortUtil.swap(queue,j,k);

k = j;

}

}

}

}

SortUtil:

package org.rut.util.algorithm;

import org.rut.util.algorithm.support.BubbleSort;

import org.rut.util.algorithm.support.HeapSort;

import org.rut.util.algorithm.support.ImprovedMergeSort;

import org.rut.util.algorithm.support.ImprovedQuickSort;

import org.rut.util.algorithm.support.InsertSort;

import org.rut.util.algorithm.support.MergeSort;

import org.rut.util.algorithm.support.QuickSort;

import org.rut.util.algorithm.support.SelectionSort;

import org.rut.util.algorithm.support.ShellSort;

public class SortUtil {

public final static int INSERT = 1;

public final static int BUBBLE = 2;

public final static int SELECTION = 3;

public final static int SHELL = 4;

public final static int QUICK = 5;

public final static int IMPROVED_QUICK = 6;

public final static int MERGE = 7;

public final static int IMPROVED_MERGE = 8;

public final static int HEAP = 9;

public static void sort(int[] data) {

sort(data, IMPROVED_QUICK);

}

private static String[] name={

"insert","bubble","selection","shell","quick","improved_quick","merge","improved_merge","heap"

};

private static Sort[] impl=new Sort[]{

new InsertSort(),

new BubbleSort(),

new SelectionSort(),

new ShellSort(),

new QuickSort(),

new ImprovedQuickSort(),

new MergeSort(),

new ImprovedMergeSort(),

new HeapSort()

};

public static String toString(int algorithm){

return name[algorithm-1];

}

public static void sort(int[] data, int algorithm) {

impl[algorithm-1].sort(data);

}

public static interface Sort {

public void sort(int[] data);

}

public static void swap(int[] data, int i, int j) {

int temp = data;

data = data[j];

data[j] = temp;

}

}

转载于:https://www.cnblogs.com/alaricblog/p/3278287.html

Java实现各种排序算法相关推荐

  1. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

    学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...

  2. Java 实现常见排序算法

    Java 实现常见排序算法 1. 综述 复习常见排序算法,用Java实现. 2. 代码 1 package cn.edu.tju.scs; 2 3 public class Sort { 4 publ ...

  3. Java回炉之排序算法

    Java回炉之排序算法 Java回炉之排序算法 冒泡排序 插入排序 归并排序 快速排序 希尔排序 选择排序 堆排序 冒泡排序 一次次遍历数组,每次比较相邻两个. 两重循环,内层比较index和inde ...

  4. Java折半二叉树,成都汇智动力-Java实现常用排序算法

    原标题:成都汇智动力-Java实现常用排序算法 排序算法介绍 1. 基本概念 稳定性: 待排序的数列中,若两个元素的值相等 R1 = R2 ,在排序结束之后,元素之间的相对位置没有发生变化,则称排序算 ...

  5. Java默认的排序算法

    Java基础-08 [08:11] Java默认的排序算法: 需要区分: 是 Arrays.sort() 还是 Collections.sort() (底层是调用 Arrays.sort()): 什么 ...

  6. 【黑马程序员】 学习笔记 - Java数组及排序算法

    ----------------------android培训.java培训.期待与您交流!---------------------- JAVA数组及排序算法 一  数组 1.定义 定义:有联系的一 ...

  7. java常用的排序算法的思想以及实现

    一些常见的排序算法的事项以及java实现 由于时间上的原因没有计算时间复杂度,以后有时间补上,或者大家有兴趣的可以自己算算 package com.sgcc.cn;import java.util.A ...

  8. java八种排序算法---直接插入排序

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

  9. Java十大排序算法总结,Java排序算法总结之冒泡排序

    本文实例讲述了Java排序算法总结之冒泡排序.分享给大家供大家参考.具体分析如下: 前言:冒泡排序(BubbleSort)就是依次比较相邻的两个数,将小数放在前面,大数放在后面. 下面让我们一起    ...

  10. java 实现 常见排序算法(一) 冒泡排序

    大家好,我是烤鸭: 今天分享一下基础排序算法之冒泡排序. 1.     冒泡排序: 原理:比较两个相邻的元素,将较大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第 ...

最新文章

  1. 软件开发 自由职业_自由职业? 这里有7个可以出售软件开发服务的地方
  2. metaSPAdes:新型多功能宏基因组拼接工具
  3. 开灯问题 简单模拟法
  4. 不是mysql常用类型的是什么_下列选项中不是MySQL中常用数据类型的是()
  5. OpenStack概念架构简述
  6. 移除元素--双指针法
  7. 《数学分析》里的人生
  8. TCP与UDP传输协议
  9. 为Windows添加日志事件
  10. Zsh和oh my zsh的安装和使用
  11. springmvc使用rest风格的404错误
  12. 5.16 BScroll页面切换滑动失效,点击事件冒泡(未绑定click也会监听click),transition-group动画特例,BScroll未激活不允许任何事件调用,类的实例和对象
  13. GoGoCode 代码语言转换
  14. 金蝶引出文件到服务器,金蝶迷你版如何引出帐套文件,具体操作流程
  15. MATLAB2020a WIN10安装教程
  16. 智能发展的四个层次:运算智能,感知智能,认知智能,强智能。道翰天琼认知智能。
  17. 电梯控制系统的实现(代码简洁优质、易懂)
  18. 手游平台如何正确运营?
  19. AD中 Top Solder和Top Paste的区别
  20. Android QQ登录,分享,分享图片

热门文章

  1. 阜阳男子拿22万硬币去银行转账,银行员工数钱数到“手抽筋”
  2. 访问 Neutron 外部网络 - 每天5分钟玩转 OpenStack(143)
  3. 克服SOA实施过程中的障碍
  4. 身体对腐朽灵魂的一次震撼:向京的雕塑与观众的行为
  5. 昨天是欧洲男人的,今天却属于亚洲女人
  6. protel PCB布线精华文章
  7. 互联网产品初期需求确定与数据库模型设计——基于Visio和Xmind
  8. 浙大远程教育计算机作业3,2016浙大远程教育计算机应用基础作业-3剖析
  9. mysql5.5索引,MySQL--5索引选择原则
  10. android进出动画有白屏,Android启动白屏原因及解决方案