今天复习排序的时候,想起以前刚接触冒泡排序的时候写了一个优化算法,想找的时候发现找不到了,所以今天又整理了一下思路,于是写了一个简单的冒泡排序优化并记录下来。
主要思路是如果数组元素交换后,后面的所有数组元素没有再发生交换,则说明最后一次交换后的所有数组元素必定已经排好序,于是冒泡排序两两交换时,记录当前交换的数组下标,则下一次排序次数直接变为 所记录的数组下标,这样就减少了比较的次数。
而如果在某一次排序内没有发生数组元素交换的话则说明数组里所有的元素都已经排好序,则可以直接中断排序。
具体实现如下:
package test;
import java.util.Arrays;
/*
* 冒泡排序
*/
public class Sort {
public static void main(String[] args) {
int[] arr = {3, 2, 1, 4, 5, 6, 7, 8, 9, 0};
Sort(arr);
System.out.println("排序结果:" + Arrays.toString(arr));
}
/**
* 冒泡排序方法
* @param a
*/
public static void Sort(int[] a){
int i=a.length-1;
int b=1;//
while(b!=0){//
boolean flag=true;
for(int j=0;j<i;j++){
if(a[j]>a[j+1]){
swap(a, j,j+1);
b=j;
flag=false;
}
}
i=b;
if(flag){
break;
}
}
}
/**
* 交换元素通用处理
*
* @param arr
* @param a
* @param b
*/
private static void swap(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}
网友评论