常见排序java实现
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实现的更多相关文章
- 常见排序——Java实现
1 package struct; 2 3 /** 4 * 5 * @作者:dyy 6 * @公司:陕西科技大学 7 * @修改日期: 8 * @邮箱:1101632375@qq.com 9 * @描 ...
- 常见排序算法(附java代码)
常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...
- 常见排序算法总结 -- java实现
常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间 ...
- Java基础-数组常见排序方式
Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...
- 常见排序算法题(java版)
常见排序算法题(java版) //插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.Sor ...
- Java基础语法(8)-数组中的常见排序算法
title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...
- 常见排序算法(java实现)
常见排序算法介绍 冒泡排序 代码: public class BubbleSort { public static void sort(int[] array) { int tValue; for ( ...
- 一些常见的Java面试题 & 面试感悟
< 前言 > 近期在面试,深感这个行业的浮躁,一些菜不辣基的弱鸡开出的工资待遇要求,超过了我.不知道他们是怎么拿到那么高的工资的,难道是他在公司有亲戚朋友吗?有后台吗?是行业热钱真的过多了 ...
- 最常见的Java面试题及答案汇总(三)
上一篇:最常见的Java面试题及答案汇总(二) 多线程 35. 并行和并发有什么区别? 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 并行是在不同实体上的多个事 ...
随机推荐
- Android-socket服务端断重启后,android客户端自动重连
今天研究这个问题搞了整整一天啊!终于出来了,不过我没有多大的成就感,为什么呢?因为这不是我的劳动成果.同样的问题,我却没想出来!心塞的很啊…… 不过还是要给大家分享一下,希望给大家带来帮助! 先声明一 ...
- [转]设计一款Android App总结
开发工具的选择 开发工具我将选用Android Studio,它是Google官方指定的Android开发工具,目前是1.2.2稳定版,1.3的预览版也已经发布了.Android Studio的优点就 ...
- IOS RunLoop浅析 三
经过两篇的介绍我想对RunLoop应该有了简单的了解,至少不至于一无所知. 在这篇我想对“CFRunLoopObserverRef”做一下简单的补充. 在补充之前先说一下. 在现在的开发中已经很少见到 ...
- Android—定位
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button ...
- centos为用户增加ssh key
linux增加用户,为用户增加key 可以用 ssh-keygen -t rsa 添加ssh的key,会得到public_key和自己的private_key 然后这个key可以用在任何用户上 ad ...
- MongoDB学习笔记~索引提高查询效率
回到目录 索引这个东西大家不会陌生,只要接触到稍微大一点的数据,都会用到这东西,它可以提升查询的速度,相当代价就是占用了更多的存储空间,这也是正常的,符合“能量守恒定理”,哈哈!今天说的是MongoD ...
- 2016 最佳 Linux 发行版排行榜
2015年,不管在企业市场还是个人消费市场都是 Linux非常重要的一年.作为一个自2005年起就开始使用 Linux的 Linuxer ,我门见证了 Linux在过去十年的成长.2016 Linux ...
- hadoop2.6.2+hbase+zookeeper环境搭建
1.hadoop环境搭建,版本:2.6.2,参考:http://www.cnblogs.com/bookwed/p/5251393.html 启动服务:在master机器上,进入hadoop安装目录, ...
- 【转】天啦噜!原来Chrome自带的开发者工具还能这么用!(提升JS调试能力的10个技巧)
天啦噜!原来Chrome自带的开发者工具还能这么用! (提升JS调试能力的10个技巧) Chrome自带开发者工具.它的功能十分丰富,包括元素.网络.安全等等.今天我们主要介绍JavaScript ...
- Postgresql 取随机数
取0和1之间的随机数 SELECT RANDOM(); 取介于两数之间的随机数 SELECT random()*(b-a)+a; ); 取介于两数之间的随机整数 SELECT floor(random ...