java实现五个排序并测试(冒泡、选择、插入、希尔、归并)

import java.util.Arrays;

//冒泡法排序
public class test3 {
	public static int[] bubblesort(int[] array) {
		if(array.length==0) 
			return array;
		for(int i=0;i<array.length;i++) {
			for(int j=0;j<array.length-1-i;j++) {
				if (array[j+1]<array[j]) {
					int temp=array[j+1];
					array[j+1]=array[j];
					array[j]=temp;
				}				
			}
		}
		return array;
	}
//选择
	public static int[] chosesort(int[] array){
		if(array.length==0)
			return array;
		for(int i=0;i<array.length;i++) {
			int minIndex=i;
			for(int j=i;j<array.length;j++) {
				if(array[j]<array[minIndex])
					minIndex=j;
			}
			int temp=array[minIndex];
			array[minIndex]=array[i];
			array[i]=temp;
		}
		return array;
	}
//插入排序	
	public static int[] insertionsort(int[] array){
		if(array.length==0)
			return array;
		int current;
		for (int i=0;i<array.length-1;i++) {
			current=array[i+1];
			int preIndex=i;
			while(preIndex>=0 && array[preIndex]>current) {
				array[preIndex+1]=array[preIndex];
				preIndex--;
			}
			array[preIndex+1]=current;
		}
		return array;
	}
//希尔排序
	public static int[] shellsort(int[] array){
		int len=array.length;
		int temp,gap=len/2;
		while(gap>0) {
			for(int i=gap;i<len;i++) {
				temp=array[i];
				int preIndex=i-gap;
				while(preIndex>=0 && array[preIndex]>temp) {
					array[preIndex+gap]=array[preIndex];
					preIndex-=gap;
				}
				array[preIndex+gap]=temp;
			}
			gap/=2;
		}
	return array;
	}
//归并排序
	public static int[] mergesort(int[] array){
		if(array.length<2)
			return array;
		int mid=array.length/2;
		int[] left=Arrays.copyOfRange(array, 0, mid);
		int[] right=Arrays.copyOfRange(array, mid, array.length);		
		return merge(mergesort(left),mergesort(right));
		
	}
	public static int[] merge(int[] left,int[] right) {
		int [] result=new int[left.length+right.length];
		for(int index=0,i=0,j=0;index<result.length;index++) 
		{
			if(i>=left.length)
				result[index]=right[j++];//左边的数列已经遍历完了,就放下右边的数
			else if(j>=right.length)
				result[index]=left[i++];//右边的数列以及遍历完了,那就放下左边的数
			else if(left[i]>right[j])
				result[index]=right[j++];//result[index]=right[j],之后j自增
			else
				result[index]=left[i++];//result[index]=left[i],之后i自增
		}
		return result;
	}
	
	
public static void main(String args[]) {
	int Array[]=new int[10];//动态数组
	for(int i=0;i<Array.length;i++) {
		Array[i]=(int) (100*Math.random());
	}
	System.out.println("排序前的情况");
	for(int j=0;j<Array.length;j++) {
		System.out.println(Array[j]);
	}
	System.out.println("冒泡法排序后的情况");
	Array=bubblesort(Array);
	for(int j=0;j<Array.length;j++) {
		System.out.println(Array[j]);
	}
	for(int i=0;i<Array.length;i++) {
		Array[i]=(int) (100*Math.random());
	}
	System.out.println("排序前的情况");
	for(int j=0;j<Array.length;j++) {
		System.out.println(Array[j]);
	}
	System.out.println("选择法排序后的情况");
	Array=chosesort(Array);
	for(int j=0;j<Array.length;j++) {
		System.out.println(Array[j]);
	}
	for(int i=0;i<Array.length;i++) {
		Array[i]=(int) (100*Math.random());
	}
	System.out.println("排序前的情况");
	for(int j=0;j<Array.length;j++) {
		System.out.println(Array[j]);
	}
	System.out.println("插入法排序后的情况");
	Array=insertionsort(Array);
	for(int j=0;j<Array.length;j++) {
		System.out.println(Array[j]);
	}
	for(int i=0;i<Array.length;i++) {
		Array[i]=(int) (100*Math.random());
	}
	System.out.println("排序前的情况");
	for(int j=0;j<Array.length;j++) {
		System.out.println(Array[j]);
	}
	System.out.println("希尔法排序后的情况");
	Array=shellsort(Array);
	for(int j=0;j<Array.length;j++) {
		System.out.println(Array[j]);
	}
	for(int i=0;i<Array.length;i++) {
		Array[i]=(int) (100*Math.random());
	}
	System.out.println("排序前的情况");
	for(int j=0;j<Array.length;j++) {
		System.out.println(Array[j]);
	}
	System.out.println("归并法排序后的情况");
	Array=mergesort(Array);
	for(int j=0;j<Array.length;j++) {
		System.out.println(Array[j]);
	}
}

}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值