public class Sort
{ public static void main(String[] args)
{
int[] data = {49,38,65,97,76,13,27,49};
int[] res = data;
final int N = data.length;
bubbleSort(data,N);
printData(data,N); directInsertSort(data,N);
printData(data,N); binaryInsertSort(data,N);
printData(data,N); shellSort( data,N);
printData(data,N); quickSortWithRecursion(data,N);
printData(data,N); mergeSort(data,N);
printData(data,N); heapSort(data,N);
printData(data,N);
} public static void printData(int[] data, int n)
{
for (int e :data ) {
System.out.print(e+"\t");
}
System.out.println();
System.out.println();
}
public static void bubbleSort(int[] data, int n)
{
System.out.print("改进冒泡排序:\t");
int flag = n-1;
int k = n-1;
int temp; while(flag>0)
{
k = flag;
flag = 0;
for(int j=0;j<k;j++)
{
if(data[j]>data[j+1])
{
temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
flag = j+1;
}
}
} } public static void directInsertSort(int[] data, int n)
{
System.out.print("直接插入排序:\t");
int temp;
int i;
int j;
for(i=1;i<n;i++)
{
temp = data[i]; for(j=i-1;j>=0 && data[j]>temp;--j)
{
data[j+1] =data[j];
}
data[j+1] = temp;
}
} public static void binaryInsertSort(int[] data, int n)
{
System.out.print("折半插入排序:\t");
int i,j,temp;
int location;
int l,h,m;
for(i=1;i<n;i++)
{
temp = data[i]; l = 0;
h = i-1;
while(l<=h)
{
m = (l+h)/2;
if(temp==m) location = m+1;
else if (temp<m) {
h = m-1;
}
else l = m+1;
}
location = l; for(j=i-1;j>=location;--j)
{
data[j+1] = data[j];
}
data[location] = temp;
}
} public static void shellSort(int[] data, int n)
{
System.out.print("希尔排序:\t\t");
int i,j,temp;
for(int gap=n/2;gap>0;gap/=2)
for(i=gap;i<n;i+=gap)
{
temp = data[i];
for(j=i-gap;j>=0&&data[j]>temp;j-=gap)
{
data[j+gap] = data[j];
}
data[j+gap] = temp;
}
} public static void quickSortWithRecursion(int[] data, int n)
{
System.out.print("递归快速排序:\t");
quickSortWithRecursion1(data,0,n-1);
} public static void quickSortWithRecursion1(int[] data, int low, int high)
{
if(low>=high) return; //这句很重要,否则会栈溢出
int location = locate(data,low,high);
quickSortWithRecursion1(data,low,location-1);
quickSortWithRecursion1(data,location+1,high);
} public static int locate(int[] data, int low, int high)
{
int temp = data[low];
while(low<high)
{
while(low<high && data[high]>temp) --high;
if(low<high) data[low] = data[high]; while(low<high && data[low]<=temp) ++low;
if(low<high) data[high]=data[low];
}
data[low] = temp;
return low;
} public static void mergeSort(int[] data, int n)
{
System.out.print("归并排序:\t\t");
mergeSortImpl(data,0,n-1);
}
public static void mergeSortImpl(int[] data, int low, int high)
{
if(low>=high) return;
int mid = (low+high)/2;
int k = -1;
int index;
mergeSortImpl(data,low,mid);
mergeSortImpl(data,mid+1,high);
if(data[mid]<=data[mid+1]) return; //等号关键 int[] temp = new int[high-low+1];
int i=low,j=mid+1;
while(i<=low && j<=high)
{
temp[++k] = max(data[i],data[j]);
}
while(i<=low) temp[++k] = data[i];
while(j<=high) temp[++k] = data[j];
for(index=0;index<=k;++index)
{
data[low+index] = temp[index];
}
}
public static int max(int a, int b)
{
return a>b?a:b;
} public static void heapSort(int[] data, int n)
{
System.out.print("堆排序:\t\t\t");
int[] arr = new int[n+1];
System.arraycopy(data,0,arr,1,n);
heapSortImpl(arr,1,n);
System.arraycopy( arr,1,data,0,n);
} public static void heapSortImpl(int[] data, int low, int high)
{
int temp;
for(int i=high/2;i>=1;--i)
{
adjust(data,i,high);
}
for(int i=high;i>=2;--i)
{
temp = data[1];
data[1] = data[i];
data[i] = temp;
adjust(data,1,i-1);
}
} public static void adjust(int[] data, int low, int high)
{
int i=low;
int j=low*2;
/* int temp=data[i];
while(j<=high)
{
if(j<high && data[j]<data[j+1]) ++j;
if(temp<data[j])
{
data[i] = data[j];
i = j;
j = 2*i;
}
else
break;
}
data[i] = temp;*/
int temp; while(j<=high)
{
if(j<high && data[j]<data[j+1]) ++j; //j<high不能取等号 if(data[i]<data[j])
{
temp = data[i];
data[i] = data[j];
data[j] = temp;
i = j;
j = i*2;
}
else break;
} }
}

常见排序java实现的更多相关文章

  1. 常见排序——Java实现

    1 package struct; 2 3 /** 4 * 5 * @作者:dyy 6 * @公司:陕西科技大学 7 * @修改日期: 8 * @邮箱:1101632375@qq.com 9 * @描 ...

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

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

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

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

  4. Java基础-数组常见排序方式

    Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...

  5. 常见排序算法题(java版)

    常见排序算法题(java版) //插入排序:   package org.rut.util.algorithm.support;   import org.rut.util.algorithm.Sor ...

  6. Java基础语法(8)-数组中的常见排序算法

    title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...

  7. 常见排序算法(java实现)

    常见排序算法介绍 冒泡排序 代码: public class BubbleSort { public static void sort(int[] array) { int tValue; for ( ...

  8. 一些常见的Java面试题 & 面试感悟

    < 前言 > 近期在面试,深感这个行业的浮躁,一些菜不辣基的弱鸡开出的工资待遇要求,超过了我.不知道他们是怎么拿到那么高的工资的,难道是他在公司有亲戚朋友吗?有后台吗?是行业热钱真的过多了 ...

  9. 最常见的Java面试题及答案汇总(三)

    上一篇:最常见的Java面试题及答案汇总(二) 多线程 35. 并行和并发有什么区别? 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 并行是在不同实体上的多个事 ...

随机推荐

  1. 基础理解2:CSS3按钮动画

    一个Css3按钮效果很好,仔细看了一下发现就是::after,::before然后加上transition,transform等效果实现,主要关注一下几点就能轻松实现: 1.伪类需要position定 ...

  2. Android-socket服务端断重启后,android客户端自动重连

    今天研究这个问题搞了整整一天啊!终于出来了,不过我没有多大的成就感,为什么呢?因为这不是我的劳动成果.同样的问题,我却没想出来!心塞的很啊…… 不过还是要给大家分享一下,希望给大家带来帮助! 先声明一 ...

  3. Android 手机卫士--自定义属性

    在前面的文章中,已经实现了“设置中心”第一栏的功能以及布局 本文地址:http://www.cnblogs.com/wuyudong/p/5936016.html,转载请注明出处. 自定义属性声明 接 ...

  4. iPad编程

    1. iPad 现有型号: iPad Pro, iPad Air, iPad mini 均配备Retina显示屏.早期还有iPad 依次对应的坐标系及分辨率: iPad Pro 坐标系:1366 x ...

  5. MySQL的数据库与表格创建

    打开MySQL: 1.进入终端输入:cd /usr/local/mysql/bin/ 2.回车后 登录管理员权限 sudo su 3.回车后输入以下命令来禁止mysql验证功能 ./mysqld_sa ...

  6. Microsoft SQL Server 2005 Service fails to start

    今天碰到一雷死人的事情,在Windows Server 2012 R2上安装SQL SERVER 2005标准版过程中一直遇到"The SQL Server service failed t ...

  7. W3School-CSS 外边距 (margin) 实例

    CSS 外边距 (margin) 实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 CSS ...

  8. centos 进度条卡死

    CentOS 6.7 系统 在执行完删除更新包的全部操作之后, yum remove -y Deployment_Guide-en-US finger cups-libs cups ypbind &a ...

  9. sk_buff 里的len, data_len, skb_headlen

    http://blog.csdn.net/kakadiablo/article/details/7948414 struct sk_buff *skb; skb->len 是data长度,包含所 ...

  10. log4j 不同模块输出到不同的文件

    1.实现目标 不同业务的日志信息需要打印到不同的文件中,每天或者每个小时生成一个文件.如,注册的信息打印到register.log,每天凌晨生成一个register-年月日.log文件, 登录信息的日 ...