冒泡排序

冒泡排序及详解:

import java.util.Arrays;

/**
 * Created by Administrator on 2022/8/2.
 */
public class MaoPaoPaiXu {
    public static void main(String[] args) {
        int[] arr = {8,3,49,1,30,22,11}; // 数组长度为n
        for(int i=0;i<arr.length-1;i++){ // 外层n-1次:比如7个元素,只需要其中6个元素都确定了顺序,剩下一个也就是确定了的。
            for(int j=0;j<arr.length-1-i;j++){ // 内层交换次数:n-1-i。因为每确定一个元素,确定的元素就不参与了。每次内层循环完就会确定一个元素,减1。确定的元素是放在末尾。
                if(arr[j] > arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
    /*
        算法,思路很重要。
        做题思路:
        1.发现规律,相邻元素交换,最后总能确定一个最大的元素在末尾。
        假如前面的大于后面的就交换:
        8 3比较交换3 8,8 49比较交换8 49,49 1比较交换1 49,49 30比较交换30 49,49 22比较交换22 49,49 11比较交换11 49。最终确定末位为49。
        结果:3 8 1 30 22 11 49.
        根据这个规律写一段代码:
        for(int j=0;j<arr.length-1;j++){
            if(arr[j] > arr[j+1]){
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        2.这只能确定一个,我需要确定6次才能完成最终的排序。对应(arr.length-1),并且确定的不需要再参与比较了。
        于是想着需要在外面加一层循环
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-1;j++){
                if(arr[j] > arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        3.已经确定的不需要再参与比较了。
        每次外层循环都需要减掉末位一个。
        第一次外层循环1:arr.length-1-0
        2:arr.length-1-1 =arr.length-1-1
        3:arr.length-1-1-1=arr.length-1-2
        对应arr.length-1-i.
        最终代码:
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-1-i;j++){
                if(arr[j] > arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
     */
}

 

posted @ 2022-08-02 18:33  super超人  阅读(24)  评论(0编辑  收藏  举报