[Java] Java基本アルゴリズムのバブルソート、選択ソート、バイナリ検索

目次

バブルソート:

選択順序:

バイナリ検索方法:


バブルソート:

        バブルソートは、コンピュータ分野で比較的単純で一般的なソートアルゴリズムです。アルゴリズムの原理は、並べ替えが必要な要素列に繰り返しアクセスし、隣接する2つの要素を順番に比較し、順序が最大から最小、または最小から最大に間違っている場合、2つのデータが交換されることです。このアルゴリズムの名前の由来は、小さい要素が交換によってシーケンスの先頭にゆっくりと「浮かぶ」(昇順または降順)ことです。炭酸飲料中の二酸化炭素の泡が最終的に一番上に上がる場合、「バブルソート」という名前が付けられます。 。

配列を次のように並べ替えます。

配列:6,5,4,2,3,1(昇順)

最初のトリップ(i = 0):                                                                                           2番目のトリップ(i = 1):

          最初の比較:5      6       4 2 3 1最初の比較:4      5       2 3 1 6     

          2番目の比較:5 4      6       2 3 1 2番目の比較:4 2      5       3 1 6

          3番目の比較:5 4 2      6       3 1 3番目の比較:4 2 3       5       1 6

          4番目の比較:5 4 2 3      6       1 4番目の比較:4 2 3 1      5     6

          5番目の比較:5 4 2 3 1      6                     

3回目の旅行(i = 2):                                                                                         4回目の旅行(i = 3):

           最初の比較:2        4       3 1 5 6最初の比較:2      3        1 4 5 6

           2番目の比較:2 3        4      1 5 6 2番目の比較:2 1        3        4 5 6

           3番目の比較:2 3 1      4      5 6                              (最初の比較は2 <3なので、位置を交換する必要はありません)

5回目(i = 4):

          最初の比較:1      2        3 4 5 6 

       最初のパスの比較、または番号セット(配列)のいずれかで6を超えるものは大きくする必要があるため、最初の比較の完了後、6は最後の時間にジャンプしますが、比較の2番目のパスでは最初のパス以降トリップの比較では、最大数(最小数)が最後に移動しているため、2回目の比較では、最後の数と比較する必要はありません。同じことが後ろにあります。

3番目のパスでは、最後の2つの数値と比較する必要はありません。

4番目のパスでは、最後の3つの数値と比較する必要はありません。

5回目のパスでは、最後の4つの数値と比較する必要はありません。

        上記の移動プロセスでは、比較の数「i」はセット(配列)-1の長さであり、各比較の回数(5,4,3,2,1)「j」を使用できることがわかります。 (配列)長さ-パス数-1。各比較では、最初から始めて、2つの数値のサイズを比較します。現在の数値が次の数値より大きい場合、2つの数値は位置を交換します。

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

   public static int[] bubbleMethod(int[] arr){
        //执行的趟数
        for (int i = 0; i < arr.length; 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;
                }
            }
        }
        return arr;
    }

選択順序:

          私はそれを反映するアニメーション画像を見つけました:

配列:6,5,4,2,3,1(昇順)[赤い数字は次のデータと比較するために使用されるデータ、     青い数字は比較されるデータを表す]

最初のトリップ(i = 0):(最初の番号は次の番号と比較されます)                         2番目のトリップ(i = 1):( 2番目の番号は次の番号と比較されます)

          最初の比較:     6       4 2 3 1最初の比較:1          4       5 3 6    

          2番目の比較:4       5      6 2 3 1 2番目の比較:1          4      5       3 6   

          3番目の比較:2           5 6 3 1 3番目の比較:1      2     4 5          6   

          4番目の比較:2        4 5      3       6 1 4番目の比較:1      2      4 5 3      6   

          5番目の比較:1             4 5 3 6                    

3回目の旅行(i = 2):()                                                                                          4回目の旅行(i = 3):

           最初の比較:1 2     4           3 6最初の比較:1 2 3      4           6

           2番目の比較:1 2     3   4       5 6 2番目の比較:1 2 3      4       5      6   

           3番目の比較:1 2     3       5       4 6                              

5回目(i = 4):

          最初の比較:1 2 3 4     5     6 

最初のトリップ:最初の番号を後続のすべての番号と比較します最初の番号が後続の番号よりも大きい場合は、位置を後続の番号と交換し、交換された番号の比較を続けます。

2回目のパス:最初のサイクルの後、最小の番号が最初の位置に配置されているため、2番目の番号を次の番号と比較します.2番目の番号が次の番号より大きい場合は、次の番号と比較されます。ポジションを交換し、交換されたポジションを比較し続けます…………

ルールを取得します。

        i番目のインデックス要素が比較されるたびに、最初にi + 1番目の要素と比較され、iの値はデータ(コレクション)の長さ以下になります。

public static int[] bubbleMethod(int[] arr){
    for (int i = 0; i < arr.length; i++) {
        for (int j = i+1; j < arr.length; j++) {
           //判断两个数的大小
           if (arr[i]<arr[j]){
               int temp=arr[i];
               arr[i]=arr[j];
               arr[j]=temp;
           }
       }
    }
}

バイナリ検索方法:

      要素のインデックス位置を見つけるためのバイナリ検索アルゴリズムとも呼ばれます。

該当する前提:

  • シーケンスをソートする必要があります

  • 要素の繰り返しを考慮しないでください

//定义方法完成二分查找
    public static int find(int[] arr, int a){
        //定义开始和结束
        int i = 0;
        int j = arr.length-1;
        //循环
        while(true){
            //判断
            if(i > j){
                //表示找不到
                return -1;
            }
            //中间值
            int mid = (i+j)/2;
            //比较
            if(arr[mid] == a){
                return mid;
            }else if(arr[mid] < a){
                i = mid + 1;
            }else{
                j = mid - 1;
            }
        }
    }

 

おすすめ

転載: blog.csdn.net/weixin_43267344/article/details/108018568