冒泡排序(优化)
2016-09-14 09:24
246 查看
冒泡排序的效率不高,适合小量数据的排序,当数据较多的时候,建议使用其他排序算法,在另一篇博客中我已经介绍了冒泡排序冒泡排序,这篇博客将对冒泡排序进一步优化。
例如,有这样一个数组,int arr[]={13,10,7,9,3,23,43,52,61,71};可以看到这个数组有一个明显的特点:前五个数字无序,后五个数字有序,且都比前五个数字大,这样我们就可以最多进行5次排序就可以把整个数组的顺序确定下来。
我们同样可以设置标志位,找出需要交换的数字和不需要交换的数字的分界位置。这里就是5,下次只要从数组头部遍历到这个位置就可以了。后面的数字就不用遍历了。
Java代码实现如下:
结果为:
第1次遍历:
10 7 9 3 13 23 43 52 61 71
第2次遍历:
7 9 3 10 13 23 43 52 61 71
第3次遍历:
7 3 9 10 13 23 43 52 61 71
第4次遍历:
3 7 9 10 13 23 43 52 61 71
第5次遍历:
3 7 9 10 13 23 43 52 61 71
3 7 9 10 13 23 43 52 61 71
例如,有这样一个数组,int arr[]={13,10,7,9,3,23,43,52,61,71};可以看到这个数组有一个明显的特点:前五个数字无序,后五个数字有序,且都比前五个数字大,这样我们就可以最多进行5次排序就可以把整个数组的顺序确定下来。
我们同样可以设置标志位,找出需要交换的数字和不需要交换的数字的分界位置。这里就是5,下次只要从数组头部遍历到这个位置就可以了。后面的数字就不用遍历了。
Java代码实现如下:
package bubble; public class bubble3 { public static int [] bubble(int []arr) { int j,k,m; m=1; int temp=0; int flag=arr.length; while(flag>0) { k=flag; flag=0; for(j=1;j<k;j++) { if(arr[j-1]>arr[j]) { temp=arr[j-1]; arr[j-1]=arr[j]; arr[j]=temp; flag=j; } } System.out.println("第"+(m++)+"次遍历:"); for(int i=0;i<arr.length;i++) { System.out.print(arr[i]+" "); } System.out.println(); } return arr; } public static void main(String[] args) { //数组的前五个无序,后五个有序,且后五个比前五个都大。 int arr[]={13,10,7,9,3,23,43,52,61,71}; int arr1[]=bubble(arr); for(int i=0;i<arr1.length;i++) { System.out.print(arr1[i]+" "); } } }
结果为:
第1次遍历:
10 7 9 3 13 23 43 52 61 71
第2次遍历:
7 9 3 10 13 23 43 52 61 71
第3次遍历:
7 3 9 10 13 23 43 52 61 71
第4次遍历:
3 7 9 10 13 23 43 52 61 71
第5次遍历:
3 7 9 10 13 23 43 52 61 71
3 7 9 10 13 23 43 52 61 71