blog

バブルソートについて話す

バブルソートは、実装が簡単で原理が理解しやすいため、最も人気のあるソート方法の1つです。バブルソートという名前が示すように、水中の泡のように、1つずつ水面に上がっていくようにソートされます。 1 .上...

Oct 23, 2020 · 3 min. read
シェア

バブルソート入門

バブルソートは、そのシンプルさと実装のしやすさ、そして原理のわかりやすさから、最もポピュラーなソート方法のひとつです。バブリングソートという名前が示すように、その並べ替えプロセスは水の中の泡のように、1つずつ表面に上がってきます。

バブルソート・コードの実装

import java.util.Arrays;
public class MaopaoSort {
	
	static int[] array = {3,2,4,1,5,0};
	
	public static void maopaoSort(int[] a) 
	{
		//外側のループは、比較のラウンド数は、5回の合計を実施することができる
		for(int i=0;i<a.length-1;i++) 
		{
			//メモリループは、各ラウンドで実行される2対2の比較である
			for(int j=0;j<a.length-1;j++) 
			{
				if(a[j] > a[j+1]) 
				{
					int temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp; 
				}
			}
			System.out.println(" "+(i+1)+"ソートのラウンドの後、配列は: "+Arrays.toString(a));
		}
	}
	
	public static void main(String[] args) {
		maopaoSort(array);
	}
}

バブリングソートの最適化

1 .上記のコードと実行結果を観察すると、最初のラウンドが終わったとき、最後の数字は配列の中で最大の要素でなければならないことがわかります。そうすると、コードは次のように修正できます:

public static void maopaoSort(int[] a) 
{
	//外側のループは、比較のラウンド数は、5回の合計を実施することができる
	for(int i=0;i<a.length-1;i++) 
	{
		//メモリループは、各ラウンドで実行される2対2の比較である
 //そして、各ラウンドの終了後、次の2つの2つの比較は、1つ未満の比較することができる
		for(int j=0;j<a.length-i-1;j++) 
		{
			if(a[j] > a[j+1]) 
			{
				int temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp; 
			}
		}
		System.out.println(" "+(i+1)+"ソートのラウンドの後、配列は: "+Arrays.toString(a));
	}
}

これは、ここで考えることができる、2つの比較のラウンドは、配列の要素のどれもスワップしない場合は、実際にはソート作業が完了しているので、プロシージャ内のフラグを追加することを検討することができます、デフォルトでは、要素のスワップかどうかの比較のラウンドを意味し、falseです、プロシージャが要素のスワップに実行されると、フラグがtrueに設定され、比較のラウンドの最後に、もしフラグが真の場合、それは比較のラウンドは、要素のスワップで発生しなかったことを意味し、ソートが完了すると、フラグが真の場合、それは比較のこのラウンドはまだ要素のスワップであることを意味し、あなたはソートの次のラウンドに続行する必要があります。コードの実装は次のとおりです:

import java.util.Arrays;
public class MaopaoSort {
	
	static int[] array = {1,2,0,3,5,4};
	
	public static void maopaoSort(int[] a) 
	{
		//外側のループは、比較のラウンド数は、5回の合計を実施することができる
		for(int i=0;i<a.length-1;i++) 
		{
			boolean flag = false;
			//メモリループは、各ラウンドで実行される2対2の比較である
			for(int j=0;j<a.length-i-1;j++) 
			{
				if(a[j] > a[j+1]) 
				{
					int temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;
					flag = true;
				}
			}
			System.out.println(" "+(i+1)+"ソートのラウンドの後、配列は: "+Arrays.toString(a));
			if(flag == false)
			{
				System.out.println("2つの比較のこのラウンドは、要素のスワップで発生しなかった、ソートが完了している!");
				return;
			}
		}
	}
	
	public static void main(String[] args) {
		maopaoSort(array);
	}
}
Read next

J41コンストラクタ

1.共通関数2.コンストラクタ1.Funcは共通関数と呼ばれなくなり、コンストラクタと呼ばれるようになりました2.返される結果もRETURNに基づいて返り値を決定するのではなく、返される結果は現在のクラスのインスタンスになります3.カスタムクラスを作成し

Oct 23, 2020 · 4 min read