バブルソート
バブルソートこのアルゴリズムを見たとき、私は「小数が浮かんで、大きな数字が沈む」ということを覚えていました。層ごとの比較を介して、小数は表面に浮かび、大きな数字は「水の底に石を沈めます」。これにより、ソートの効果が得られます。バブルソートは、シンプルなソートアルゴリズムです。ソートするシーケンスを繰り返し訪れ、一度に2つの要素を比較し、それらが正しくない場合にそれらを交換します。シーケンスにアクセスする作業は、交換が不要になるまで繰り返されます。つまり、シーケンスがソートされました。このアルゴリズムの起源は、要素が小さいほど、Exchangeを介してシーケンスの上部にゆっくりと「フロート」するためです。
バブルソートアルゴリズムの操作は次のとおりです。
1.隣接する要素を比較します。最初のものが2番目のものよりも大きい場合は、2つを交換します。
2。最初のペアから最後の最後のペアまで、隣接する要素のペアごとに同じ作業を行います。この時点で、最後の要素は最大の要素でなければなりません。
3.最後の要素を除くすべての要素について、上記の手順を繰り返します。
4.比較する必要がある数字のペアがないまで、毎回より少ない要素の上記の手順を繰り返し続けます。
バブルソートプロセス図:
例コード
public class bubblesort {public static int [] bubblesort(int [] array){for(int i = 0; i <array.length; i ++){for(int j = 0; j <array.length-i-1; j ++){if(array [j]> array [j+1]){int temp = array [j]; array [j] = array [j+1];配列[j+1] = temp; }} system.out.println( "th"+(i+1)+"sorting"); for(int k = 0; k <array.length; k ++){system.out.print(array [k]+""); } system.out.println(); } return array; } / ** * @param args * / public static void main(string [] args){int [] array = {7,3,9,5,6,8,1}; Bubblesort(配列); }}印刷結果:
1番目のオーダー3 7 5 6 8 1 9SORTING 2ND ORDER 3 5 6 7 1 8 9 9SORTING 3 5 6 1 7 8 9SORTING 4th Order 3 5 1 6 7 8 9 SORTING 5th Order 3 1 5 6 7 8 9 SORTING 6th Order 1 3 5 6 7 8 9SORTING 7TH ORDER 1 3 5 6 7 8 9 1 3 5 6 7 8 9SORTING 7th Order 1 3 5 6 7 8 9 SORTING 5th Order 3 5 6 7 8 9 SORTING 6th Order 1 3 5 6 7 8 9 SORTING 7th Order 1 3 5 6 7 8 9 SESORTING 7th Order 1 3 5 6 9 SSORTING 5th Order 3 5 6 7 8 9 SORTING 5TH ORDER 3 5 6 7 8 9 SORTING 5TH ORDER 3 5 6 7 8 9 SSORTING 5TH ORDER 3 5 6 7 8 9
バイナリ検索
注文をソートした後、必要なデータも見つける必要があります。二分法検索は、一般的に使用される、セクション時間、および基本的なアルゴリズムです。バイナリ検索は、木製のスティックの中央のペアと同様に、ソートされたデータの中央位置から検索して比較することであるため、折りたたみとハーフファインディングとも呼ばれます。より効率的な検索方法です。
[バイナリ検索要件]: 1。シーケンシャルストレージ構造を採用する必要があります。 2。キーワードのサイズに応じて、キーを整然と並べる必要があります。
[長所と短所]半フィニッシュ検索方法の利点は、比較時間が少なく、検索速度が高く、平均パフォーマンスが良好であることです。その欠点は、見上げるテーブルが順序付けられたテーブルであり、挿入して削除することが難しいことです。したがって、ハーフファインディング方法は、頻繁に変更されず頻繁に見つかる秩序あるリストに適しています。
[アルゴリズムの考え]最初に、テーブルの中央位置に記録されたキーワードを検索キーワードと比較します。 2つが等しい場合、検索は成功します。それ以外の場合、テーブルは中間位置レコードを持つ2つのサブテーブルに分割されます。中央の位置に記録されたキーワードが検索キーワードよりも大きい場合、以前のサブテーブルをさらに検索し、それ以外の場合は次のサブテーブルをさらに検索します。
検索が成功するように条件を満たすレコードが見つかるまで、または子テーブルが存在しないまで、検索が現時点で失敗するまで、上記のプロセスを繰り返します。
[アルゴリズムの複雑さ]アレイの長さがnであると仮定すると、そのアルゴリズムの複雑さはo(log(n)),最悪の時間の複雑さはO(n)。
例コード
パッケージcom.somnus.array;/** *バイナリ検索方法 * @author compaq * */public class binarysearch {public static int binarysearch(int] array、int value){int low = 0; int high = array.length-1; int middle = 0; while(low <= high){middle =(low+high)/2; // 0 6 4 6 6 6 for(int i = 0; i <array.length; i ++){system.out.print(array [i]+""); if(i == middle)// 3 5 6中間点の直後に区切り文字を印刷{system.out.print( "##"); }} system.out.println(); if(array [middle] == value){return middle; } if(value <array [middle]){high = middle -1; } if(value> array [middle]){low = middle + 1; }} return -1; } / ** * @param args * / public static void main(string [] args){int [] array = {7,3,9,5,6,8,1}; int [] array1 = bubblesort.bubblesort(array); int index = binarysearch(array1,1); System.out.println( "local:"+index); }}印刷結果:
1st Order 3 7 5 6 8 1 9Sorting 2nd Order 3 5 6 7 1 8 9 9SORTING 3 5 6 1 7 8 9SORTING 4th Order 3 5 1 6 7 8 9 SORTING 5TH ORDER 3 1 5 6 7 8 9SORTING 6th Order 1 3 5 6 7 8 9SORTING 7TH ORDER 1 3 5 6 7 8 91 5 6
分析と要約
検索アルゴリズムでは、二分法は最速ですが、順序付けられたシーケンスでなければなりません。これらはアルゴリズムの基礎であり、アルゴリズムの学習への実験、要約、吸収、固執に多くの努力をする必要があります。