交换排序(冒泡排序)

交换排序(冒泡排序)

方法:比较相邻的元素并交换,直到数组有序为止
特点:性能和插入排序相似

public static void sort(int[] arr) {
	for(int i=0;i<arr.length;i++) {
		for(int j=0;j<arr.length-i-1;j++) {
			if(arr[j+1]<=arr[j]) {
				int tmp=arr[j+1];
				arr[j+1]=arr[j];
				arr[j]=tmp;
			}
		}
	}
}
//改进
public static void sort01(int[] arr) {
	for(int i=0;i<arr.length;i++) {
		//每次重置为false
		boolean flag=false;
		for(int j=0;j<arr.length-i-1;j++) {
			if(arr[j+1]<=arr[j]) {
				int tmp=arr[j+1];
				arr[j+1]=arr[j];
				arr[j]=tmp;
				flag=true;
			}
		}
		//如果上一次扫描没有发生交换,说明已经全部有序
		if(flag==false) {
			break;
		}
	}
}


//通过第一次改进的思路,我们可以深入考虑是否可以将已经有序的范围确定在某个区间
public static void sort02(int[] arr) {
	int flag=arr.length-1;
	int lastPosTmp=arr.length-1;
	for(int i=0;i<arr.length;i++) {
		//每次重置为
		flag=lastPosTmp;
		for(int j=0;j<arr.length-i-1;j++) {
			if(arr[j+1]<=arr[j]) {
				int tmp=arr[j+1];
				arr[j+1]=arr[j];
				arr[j]=tmp;
				lastPosTmp=j;
			}
		}
		//如果上一次扫描没有发生交换,说明已经全部有序
		if(lastPosTmp==flag) {
			break;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40908515/article/details/86690388