常见排序(java版)
2015-12-14 22:06
609 查看
一丶折半插入排序
public class binInsertSort {
private static int a[]={22,3,43,11,99,88,34,34,33,22,11,1};
public static void main(String[] args) {
int []b=binInsertSort(a,0,12);
for(int i=0;i<b.length;i++){
System.out.print(a[i]+"\t");
}
}
public static int[] binInsertSort(int[] a,int low,int high){
for(int i=low+1;i<a.length;i++){
//保存插入元素
int temp=a[i];
//设置初始区间
int hi=i-1;
int lo=low;
//折半决定插入位置
while(lo<=hi){
int mid=(hi+lo)/2;
if(temp<a[mid]){
hi=mid-1;
}else{
lo=mid+1;
}
}
//移动在temp那个之后的元素
for(int j=i-1;j>hi;j--)
a[j+1]=a[j];
//插入元素temp
a[hi+1]=temp;
}
return a;
}
二丶冒泡排序
public class bubbleSort {
private static int[] a={4,3,5,7,2,1,10,6};
public static void main(String[] args) {
int b[]=bubble(a,0,8);
for(int i=0;i<b.length;i++){
System.out.print(b[i]+"\t");
}
}
public static int[] bubble(int[] a,int low,int high){
for(int i=1;i<a.length;i++){
for(int j=low;j<a.length-i;j++){
if(a[j]<=a[j+1]){
int temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
return a;
}
}
}
三丶堆排序
public class heapSort {
private static int [] a={2,1,3,5,4,7,6,9,10,8};
public static void main(String[] args) {
a=heapSort(a);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"\t");
}
}
private static void heapAdjust(int [] a,int low,int high){
int temp=a[low];
//沿关键字较大的元素向下进行帅选
for(int j=2*low;j<=high;j=j*2){
//j指向关键字较大的元素
if(j<high&&a[j]<a[j+1])j++;
//若temp比其孩子都大,则插入到low所指位置
if(temp>a[j])break;
a[low]=a[j]; low=j;
}
a[low]=temp;
}
private static int[] heapSort(int[] a){
int n=a.length-1;
//初始化建堆
for(int i=n/2;i>=1;i--)
heapAdjust(a,i,n);
//不断输出堆顶元素并调整r[1...i-1]为新堆
for(int i=n;i>1;i--){
//交换堆顶与堆低元素
int temp=a[1];
a[1]=a[i];
a[i]=temp;
//调整
heapAdjust(a,1,i-1);
}
return a;
}
}
四丶直接插入排序
public class InsertSort {
private static int a[]={22,3,43,11,99,88,34,34,33,22,11,1};
public static void main(String[] args) {
int []b;
b=insertSortAnother(a,0,12);
for(int i=0;i<b.length;i++){
System.out.print(b[i]+"\t");
}
<span style="white-space:pre"> </span>public static int[] insertSort(int[] a,int low,int high){
for(int i=low+1;i<a.length;i++){
System.out.println("a["+i+"]"+a[i]);
if(a[i]<a[i-1]){
//将a[i] 插入有序表
int temp=a[i];
//用a[i-1]取代a[i]
a[i]=a[i-1];
//再和前面数据进行对比 如果小于的话 就取代然后把数据后移
int j=i-2;
for(;j>=low&&a[j]>temp;j--)
a[j+1]=a[j];
//这个元素取代是在for循环之后 而不是在for循环里面 好好理解
a[j+1]=temp;
}
}
return a;
}
/**从大到小排列
* @return
*/
public static int[] insertSortAnother(int[] a,int low,int high){
for(int i=low+1;i<a.length;i++){
System.out.println("a["+i+"]"+a[i]);
if(a[i]>a[i-1]){
int temp=a[i];
a[i]=a[i-1];
int j=i-2;
for(;j>=low&&a[j]<temp;j--)
//一开始这个地方a[j]写成了a[i] 所以搞错了
a[j+1]=a[j];
a[j+1]=temp;
}
}
return a;
}
}
public class binInsertSort {
private static int a[]={22,3,43,11,99,88,34,34,33,22,11,1};
public static void main(String[] args) {
int []b=binInsertSort(a,0,12);
for(int i=0;i<b.length;i++){
System.out.print(a[i]+"\t");
}
}
public static int[] binInsertSort(int[] a,int low,int high){
for(int i=low+1;i<a.length;i++){
//保存插入元素
int temp=a[i];
//设置初始区间
int hi=i-1;
int lo=low;
//折半决定插入位置
while(lo<=hi){
int mid=(hi+lo)/2;
if(temp<a[mid]){
hi=mid-1;
}else{
lo=mid+1;
}
}
//移动在temp那个之后的元素
for(int j=i-1;j>hi;j--)
a[j+1]=a[j];
//插入元素temp
a[hi+1]=temp;
}
return a;
}
二丶冒泡排序
public class bubbleSort {
private static int[] a={4,3,5,7,2,1,10,6};
public static void main(String[] args) {
int b[]=bubble(a,0,8);
for(int i=0;i<b.length;i++){
System.out.print(b[i]+"\t");
}
}
public static int[] bubble(int[] a,int low,int high){
for(int i=1;i<a.length;i++){
for(int j=low;j<a.length-i;j++){
if(a[j]<=a[j+1]){
int temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
return a;
}
}
}
三丶堆排序
public class heapSort {
private static int [] a={2,1,3,5,4,7,6,9,10,8};
public static void main(String[] args) {
a=heapSort(a);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"\t");
}
}
private static void heapAdjust(int [] a,int low,int high){
int temp=a[low];
//沿关键字较大的元素向下进行帅选
for(int j=2*low;j<=high;j=j*2){
//j指向关键字较大的元素
if(j<high&&a[j]<a[j+1])j++;
//若temp比其孩子都大,则插入到low所指位置
if(temp>a[j])break;
a[low]=a[j]; low=j;
}
a[low]=temp;
}
private static int[] heapSort(int[] a){
int n=a.length-1;
//初始化建堆
for(int i=n/2;i>=1;i--)
heapAdjust(a,i,n);
//不断输出堆顶元素并调整r[1...i-1]为新堆
for(int i=n;i>1;i--){
//交换堆顶与堆低元素
int temp=a[1];
a[1]=a[i];
a[i]=temp;
//调整
heapAdjust(a,1,i-1);
}
return a;
}
}
四丶直接插入排序
public class InsertSort {
private static int a[]={22,3,43,11,99,88,34,34,33,22,11,1};
public static void main(String[] args) {
int []b;
b=insertSortAnother(a,0,12);
for(int i=0;i<b.length;i++){
System.out.print(b[i]+"\t");
}
<span style="white-space:pre"> </span>public static int[] insertSort(int[] a,int low,int high){
for(int i=low+1;i<a.length;i++){
System.out.println("a["+i+"]"+a[i]);
if(a[i]<a[i-1]){
//将a[i] 插入有序表
int temp=a[i];
//用a[i-1]取代a[i]
a[i]=a[i-1];
//再和前面数据进行对比 如果小于的话 就取代然后把数据后移
int j=i-2;
for(;j>=low&&a[j]>temp;j--)
a[j+1]=a[j];
//这个元素取代是在for循环之后 而不是在for循环里面 好好理解
a[j+1]=temp;
}
}
return a;
}
/**从大到小排列
* @return
*/
public static int[] insertSortAnother(int[] a,int low,int high){
for(int i=low+1;i<a.length;i++){
System.out.println("a["+i+"]"+a[i]);
if(a[i]>a[i-1]){
int temp=a[i];
a[i]=a[i-1];
int j=i-2;
for(;j>=low&&a[j]<temp;j--)
//一开始这个地方a[j]写成了a[i] 所以搞错了
a[j+1]=a[j];
a[j+1]=temp;
}
}
return a;
}
}
相关文章推荐
- 深入浅出Swing事件分发线程
- 九度oj 1380 lucky number + 二进制
- Java多线程-新特征-锁(下)
- Java学习--多态
- Java中文字符处理的四大迷题
- Java中Cookie里的方法总结
- 01java语法回顾_常用api类
- Java代码性能优化
- maven初识-Jetty,eclipse,maven结合
- [javase学习笔记]-5.5 数组常用操作(2)
- 《java多线程编程核心技术》之Lock
- Java学习----封装 、继承、 内存管理
- Java Hex 16进制的 byte String 转换类
- java socket连接以及发送和接收数据
- HanLP MVN eclipse中major.minor 51(JDK 要求1.7以上)的错误解决
- Dalvik和JVM的区别
- 基于Eclipse的Hadoop应用开发环境配置和范例
- java集合——集合接口+迭代器接口
- 【Java基础】Java设计模式简介
- HDU 1178 Heritage from father 数学公式 JAVA