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. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q138-Q140)

    Question  138 You are designing a SharePoint 2010 application that will deploy a Web Part assembly. ...

  2. Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理

    Toolbar作为ActionBar使用介绍 本文介绍了在Android中将Toolbar作为ActionBar使用的方法. 并且介绍了在Fragment和嵌套Fragment中使用Toolbar作为 ...

  3. C#中的泛型

    写在前面:好几个月没更新了,这些天换了份工作,原来的公司出了很多事所以辞职了.这篇文章写的超级好,让我终于明白了困扰在我心里好久的C#泛型的概念,不仅收藏了,还手动转发一下 哈哈哈~ 1.1 C#中的 ...

  4. IOS开发基础知识--碎片25

    1:使用@protocol实现delegate和datasource模式 #import <UIKit/UIKit.h> @protocol MyViewDataSource,MyView ...

  5. iOS AFNetworking内存泄漏处理方法

    iOS AFN内存泄漏处理方法 细心的你是否也发现AFN的内存泄漏的问题了呢. 在这里给大家提供一个解决AFN内存泄漏的方法. 单例解决AFN内存泄漏 + (AFHTTPSessionManager ...

  6. iOS开发 解决UITapGestureRecognizer手势与UITableView的点击事件的冲突

    该篇文章摘自我的新浪博客,原文地址为: http://blog.sina.com.cn/s/blog_dcc636350102wavx.html UITableView 拥有属于自己的点击事件,在将一 ...

  7. SQLBackupAndFTP The server principal "NT AUTHORITY\SYSTEM" is not able to access the database "xxxx"

    Windows server 2012中使用SQLBackupAndFTP备份数据库时遇到一个错误: ERROR: The server principal "NT AUTHORITY\SY ...

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

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

  9. 推荐一款 chrome SSH 插件 - Secure Shell

    http://blog.csdn.net/jizhongchun/article/details/8519413 导读:我就是一个Chrome Fans.最近发现一款google官方出的SSH插件 - ...

  10. win7如何恢复以前的ie版本

    如何恢复以前的ie版本-控制面板,程序和功能-查看已安装的更新-搜索Internet explorer,然后卸载更新就Ok.