冒泡排序及其优化

…衆ロ難τιáo~ 提交于 2020-01-14 06:24:38
  冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法
  它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
  这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。(来自:百度百科)
package learning;
import java.util.Arrays;
/**
 * 冒泡排序
 * @author Lee
 *
 */
public class TestSort {

    public static void main(String[] args) {
        int[] a= {1,3,5,7,2,8,4};
        System.out.println("排序前:"+Arrays.toString(a));
//        Arrays.sort(a);
//        System.out.println("排序后:"+Arrays.toString(a));
        
        System.out.println("#############");
    
        bubbleSort(a);
        System.out.println("冒泡排序后:"+Arrays.toString(a));
        
    }
     public static void bubbleSort(int[] a) {
            int temp=0;
            for(int i=0;i<a.length;i++) {
            System.out.println(i+1+":"+Arrays.toString(a));
            for(int j=0;j<a.length-1;j++) {
                if(a[j]>a[j+1]) {
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
            }
        }
}

打印输出结果:

排序前:[1, 3, 5, 7, 2, 8, 4]
#############
1:[1, 3, 5, 7, 2, 8, 4]
2:[1, 3, 5, 2, 7, 4, 8]
3:[1, 3, 2, 5, 4, 7, 8]
4:[1, 2, 3, 4, 5, 7, 8]
5:[1, 2, 3, 4, 5, 7, 8]
6:[1, 2, 3, 4, 5, 7, 8]
7:[1, 2, 3, 4, 5, 7, 8]
冒泡排序后:[1, 2, 3, 4, 5, 7, 8]

可以从结果中看出,第4步已经出结果了。

 

优化过程:

package learning;
import java.util.Arrays;
/**
 * 冒泡排序
 * @author Lee
 *
 */
public class TestSort {

    public static void main(String[] args) {
        int[] a= {1,3,5,7,2,8,4};
        System.out.println("排序前:"+Arrays.toString(a));
//        Arrays.sort(a);
//        System.out.println("排序后:"+Arrays.toString(a));
        
        System.out.println("#############");
    
        bubbleSort(a);
        System.out.println("冒泡排序后:"+Arrays.toString(a));
        
    }
     public static void bubbleSort(int[] a) {
            int temp=0;
            for(int i=0;i<a.length;i++) {
            System.out.println(i+1+":"+Arrays.toString(a));//i为序列,从0开始
            boolean order = true;   //定义判断是否达到有序条件的变量order
            for(int j=0;j<a.length-1;j++) {
                if(a[j]>a[j+1]) {
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                    order=false;  //交换了位置,数组无序
                }
              }
            if(order/*==true*/) {
                break;   //循环结束,判断如果order==true;结束循环
            }
            }
        }
}

优化结果显示:

排序前:[1, 3, 5, 7, 2, 8, 4]
#############
1:[1, 3, 5, 7, 2, 8, 4]
2:[1, 3, 5, 2, 7, 4, 8]
3:[1, 3, 2, 5, 4, 7, 8]
4:[1, 2, 3, 4, 5, 7, 8]
冒泡排序后:[1, 2, 3, 4, 5, 7, 8]

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!