Java教程

[Java] 冒泡排序

本文主要是介绍[Java] 冒泡排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

冒泡排序算法原理

1、从后往前依次比较相邻的元素。若是要按照升序排序,则后面的元素比前面的小,就交换这2个元素;降序则相反。

2、对每一对相邻元素作同样的工作,从第一对到最后一对。进行一轮比较交换下来,最后的元素就会是最小(或最大)的数了,这个数就不用参与后面的比较操作了。

3、针对所有的元素重复以上的步骤。

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

为了尽量缩短待排序表的长度,避免下一次扫描中可能出现的不必要的比较,在每次扫描过程中,一方面要记录进行元素交换的次数,另一方面要记住在本次扫描中的最后一次进行交换的位置。在这个位置以后没有发生过交换,则说明在这个位置以后的元素实际上已经排好次序。

总的来说,冒泡法基本思想是重复的进行整个数组的排序,一次比较两个元素(两两排序),如果它们顺序不符合就交换,重复这样直到数列没有再需要交换的数为止(结束条件)。因为它就好像气泡一样,轻的气泡会往上漂浮,在不断漂浮的过程中,发生了两两交换过程,所以叫冒泡排序。

public class Test29 {
    public static void main(String[] args) {
        int[] arr={1,4,5,7,8,2};
        func(arr);
        printArr(arr);
    }

    //打印
    private static void printArr(int[] arr) {
        System.out.print("[ ");
        for (int i = 0; i < arr.length; i++) {
            if(i==arr.length-1){
                System.out.print(arr[i]+" ");
            }else{
                System.out.print(arr[i]+", ");
            }


        }
        System.out.print("]");
    }

    private static void func(int[] arr) {
        for (int i = 0; i <arr.length ; i++) {
            boolean flag=false;
            for (int j = 0; j < arr.length-1-i; j++) {
                if(arr[j]>arr[j+1]){
                    int tmp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=tmp;
                    flag=true;
                }
            }
            //若flag=false,表示此时没有交换位置,已实现冒泡排序
            if(flag==false){
                break;
            }
        }
    }
}

这篇关于[Java] 冒泡排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!