LowBトリオ---バブルソートの原則と実装

主成分分析

ここに画像の説明を挿入

/ **
*バブルソート
*ソート:デフォルトは正の順序で、小さいものから大きいものへのソート
*原則:下から上へのソートは前から後ろへのソートと呼ばれます。前の数値が次の数値よりも大きい場合、 2つの数値が交換されます
*要素の数は; N
*外側のループ:比較のためのパスの総数N-1、各パスの数は次のとおりです:i(0から開始)
*内側のループ:無秩序な領域のサイズNi-1、これは次のようにも理解できます:1回のパスでの比較の数注:ポインターが指す数は0から始まり、最後のデータを比較する必要はありません。
*コードの要点: 1つのパス、順序付けられていない領域の範囲
*最適化:バブルソートの1つのパスで交換がない場合、リストはすでに順序付けられており、アルゴリズムを直接終了できることを意味します
* @param arr
* /

コードは次のように表示されます。

package com.company;

import java.util.Arrays;

public class Main {
    
    

    public static void main(String[] args) {
    
    
        System.out.println(1);
        int[] arr = {
    
    7, 2, 5, 8, 1, 3, 6, 9, 4};
        dubbleSort(arr);
    }

    /**
     * 冒泡排序
     * 原理: 从下往上排序, 叫做从前往后排序, 如果前面的数比后面的数大,则交换2个数的位置
     * 元素个数为; N
     * 外层循环: 比较的总趟数 N-1, 每趟数为: i(从0开始)
     * 内层循环: 无序区范围大小 N-i-1, 也可以理解为:一趟中比较的次数,注意: 指针指向的数从0开始, 最后一个数据不用比较,
     * 代码关键点: 趟, 无序区范围
     * 优化: 如果冒泡排序中的一趟排序没有发生交换,则说明列表已经有序,可以直接结束算法
     * @param arr
     */
    public static void dubbleSort(int[] arr) {
    
    
        for (int i = 0; i < arr.length - 1; i++) {
    
    
            boolean flag = false;
            for (int j = 0; j < arr.length - i - 1; j++) {
    
    
                if (arr[j] > arr[j + 1]) {
    
    
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                    flag = true;
                }
            }
            System.out.println(Arrays.toString(arr));
            if (!flag){
    
    
               return;
            }
        }

    }
}

演算結果:
ここに画像の説明を挿入

アルゴリズムの複雑さ

2層ループであるため、半分はありません。つまり、O(n²)です。


実施する

おすすめ

転載: blog.csdn.net/baidu_21349635/article/details/114036890