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. jQuery $(document).ready()和JavaScript onload事件

    jQuery $(document).ready()和JavaScript onload事件 Why we need a right time? 对元素的操作和事件的绑定需要等待一个合适的时机,可以看 ...

  2. Handler.sendMessage 与 Handler.obtainMessage.sendToTarget比较

    原文地址: http://www.cnblogs.com/android007/archive/2012/05/10/2494766.html 话说在工作中第一次接触android 的Handler ...

  3. 优质Android小部件:索尼滚动相册

    虽然骚尼手机卖的不怎么样,但是有些东西还是做的挺好的,工业设计就不用说了,索尼的相册的双指任意缩放功能也是尤其炫酷.其桌面小部件滚动相册我觉得也挺好的,比谷歌原生的相册墙功能好多了,网上搜了一下也没发 ...

  4. ORACLE表空间管理维护

    1:表空间概念 在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成. 如下图所示, ...

  5. mysql慢查询日志分析工具 mysqlsla(转)

    mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览 ...

  6. Python学习笔记2-解析数据

    Import os; -- Python自带 print(os.getcwd()) -- 获得当前工作目录 os.chdir('/Users/longlong/Documents') -- 转换到/U ...

  7. Mvc model验证总结

    Model 验证总结 Model 验证总结 1 一.Model 验证标记 1 1.启用客户端验证: 1 2.在 Model 中加入验证标记 2 3 . Model 类中可以添加的验证标记: 3 3.1 ...

  8. David Camp 微信公众平台开发官方内容拓展版---PHP版本

    微信公众平台开发(一) 配置接口 微信公众平台开发(二) 微信公众平台示例代码分析 微信公众平台开发(三) 订阅事件(subscribe)处理 微信公众平台开发(四) 简单回复功能开发 微信公众平台开 ...

  9. 每天一个linux命令目录

    出处:http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 开始详细系统的学习linux常用命令,坚持每天一个命令,所以这个系列为每 ...

  10. protobuf学习(1)-ubuntu14.04下protobuf2.6安装

    1 下载protobuf https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz 2  进入 ...