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. app:clean classes Exception

    Error:Execution failed for task ':app:clean'.> Unable to delete directory: C:\Users\LiuZhen\Deskt ...

  2. Django model.py表单的默认值 默认允许为空

    Field.null 默认是null=False,这时不能传入NULL型数据,但是可以是空字符. 如果BooleanField中想要null数据类型,可以选择NullBooleanField   Fi ...

  3. 学习linux之用mail命令发邮件

    背景 这两天工作比较闲,网上各种冲浪(这个词暴露我的网龄了).看到一位大神的文章更闲 <>.端详一番,原来是用R语言拼接字符串后用shell命令发出去.发现shell命令既然还能直接发邮件 ...

  4. fillStyle图片填充

    图片自找 <!DOCTYPE HTML> <head> <meta charset = "utf-8"> <title>canvas ...

  5. centos7搭建自己的yum源

      http://www.wenbin.cf/post/37/ 1. 安装nginx,createrepo yum install nginx -y yum install createrepo -y ...

  6. Python基础1

    本节内容2016-05-30 Python介绍 发展史 Python 2 0r 3? 安装 Hello word程序 变量 用户输入 模块初识 .pyc? 数据类型初识 数据运算 if...else语 ...

  7. BCP笔记整理(二)

    BCP的基础用法可以参考上一篇:http://www.cnblogs.com/Gin-23333/p/5489889.html 这篇是补充一些有可能会用到,但是出场几率并不算大的几个参数 1.首先是 ...

  8. FFmpeg编译找不到库文件

    在编译FFmpeg的时候,用./configure 进行配置,经常会出现找不到库文件的情况,原因大概就两个: 1.没有安装库文件或者安装的库文件版本不对 2.FFmpeg没有找到库文件 前者的问题好解 ...

  9. 烂泥:haproxy学习之https配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 在前一段时间,我写了几篇有关学习haproxy的文章.今天我们再来介绍下haproxy ...

  10. Entity Framework 6 with MySql

        MySQL Connector/Net 6.8.x MySQL Server 5.1 or above Entity Framework 6 assemblies .NET Framework ...