Java的三种 简单排序

1,冒泡排序

是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

Java实现代码

private static void bubbleSort(int[] array) {
		//冒泡排序
		/*
		 * 稳定: 没有跳跃的比较,所以比较稳定
		 * 时间复杂度:o(n^2)
		 */
		// TODO Auto-generated method stub
		
		System.out.println(System.currentTimeMillis());//程序执行的时间
		int tmp=0;
		for(int i=0;i<array.length;i++){//趟数
			for(int j=0;j<array.length-1-i;j++){//比较的次数
				if(array[j+1]<array[j]){
					tmp=array[j];
					array[j]=array[j+1];
					array[j+1]=tmp;
				}
			}
		}
		System.out.println(System.currentTimeMillis());
		
	}
	public static void main(String[] args) {
		//冒泡排序
		//int[] array={12,43,2,1,54,76};
		int[] array=new int[10000];//随机生成一万个数据;
		for(int i=0;i<array.length;i++){
			array[i]=i;
		}
		bubbleSort(array);
		System.out.println(Arrays.toString(array));
		
	}
	

但是当一个数组本身就是有序的时候,此时用冒泡排序就会增加很多时间复杂度

所以我们应该对冒泡 排序进行优化。

如果让它进行第一趟比较时并没有进行任何交换,那么就说明这个数组本身就是有序的

public static void newbbsort(int[] array){
		System.out.println(System.currentTimeMillis());
		int tmp=0;
		int k=0;
		for(int i=0;i<array.length;i++){//趟数
			for(int j=0;j<array.length-1-i;j++){//比较的次数
				if(array[j+1]<array[j]){
					k++;
					tmp=array[j];
					array[j]=array[j+1];
					array[j+1]=tmp;
				}
			}
			if(i==0&&k==0)
			{
				break;
			}
			}
		System.out.println(System.currentTimeMillis());
	}


这个时候的时间之差为1

-------------如果用没有优化之前的--------------

时间差就大许多!!!!

2,选择排序

是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[553]第一次就将第一个[5][3]交换,导致第一个5挪动到第二个5后面)

java实现代码

public class Test7 {
	public static void main(String[] args) {
		int[] array={23,45,2,3,657,8};		
		selectSort(array);
		System.out.println(Arrays.toString(array));
	}
	public static void selectSort(int[] array){
		int min;
		int tmp;
		for(int i=0;i<array.length;i++){
			min=i;
			for(int j=i;j<array.length;j++){
				if(array[j]<array[min]){
					min=j;//选出最小值下标
				}
			}
			/*
			 * 将第一个元素和最小值交换
			 */
			tmp=array[i];
			array[i]=array[min];
			array[min]=tmp;
		}
	}
}

3,直接插入排序

是一种简单的排序算法,相当于生活中打扑克牌的方式,将一个数插入在一个有序的数列中。插入之后也要保证有序。

java实现代码

public class Test7 {
	public static void main(String[] args) {
		int[] array={23,45,2,3,657,8};		
		InsrtSort(array);
		System.out.println(Arrays.toString(array));
	}
	public static void InsrtSort(int[] array){
		//不稳定
		int temp;
		int j;
		for(int i=1;i<array.length;i++){
			temp = array[i];//从i号位置开始进行排序。
			for(j=i-1;j>=0;j--){
				if(array[j]>temp){
					array[j+1]=array[j];
				}else {//每次排序过后前面已经有序,找到第一个比temp小的。
					break;
				}
			}
			array[j+1]=temp;
		}
	}
}

阅读更多
个人分类: Java基础
想对作者说点什么? 我来说一句

三种简单排序

选择排序

qq_20602929 qq_20602929

2016-04-03 21:35:11

阅读数:148

没有更多推荐了,返回首页

不良信息举报

Java的三种 简单排序

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭