Goorm-泡の位置合わせ👀


泡の位置合わせ


問題の説明



解説

  • バブルソートでいいです.
  • ソートには多くの種類があり、混同を避けるためにBubbleソートがどのようなソートであるかを知る
  • 1.概念

  • 隣接要素間の比較並べ替え方法
  • 2.特徴

  • 追加スペースx->
  • をそのまま並べる必要がある
  • データ比較->比較ソート
  • 3.方法

  • から次の要素を比較します.
  • 現在、要素が次の要素より大きい場合、交換->昇順を基準にして、最大の要素が最後に並べられます.
  • が終了すると、>最大の要素を末尾
  • に置くため、最初から最後まで繰り返します.
  • 画像説明

  • 4.時間の複雑さ

  • O(N 2):2回繰り返し書きますから.すでに並べ替えられていても、比較が続くからです.
  • O(N):これが一番いい状況です.一列に並んでいれば、繰り返し文は終わります.これで最終的には1つの繰り返し文に収束するのでO(N)となる.
  • public class Bubblesort {
    
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		String input = br.readLine();
    		String[] temp = br.readLine().split(" ");
    		int[] arr = new int[temp.length]; 
    		for(int i = 0 ; i< temp.length ; i++) arr[i] = Integer.parseInt(temp[i]);
    		bubbleSort(arr);
    	}
    	
    	public static void bubbleSort(int[] arr) {
    		int tempVar = 0;
    		for(int i = 0; i < arr.length-1 ; i++) {
    			boolean flag = true;//정렬이 완료되면 반복문을 끝낼 표식
    			for(int j = 0 ; j<arr.length-1-i ; j++) {
    				if(arr[j]>arr[j+1]) {//앞이 뒤보다 크면
    					tempVar=arr[j];
    					arr[j] = arr[j+1];
    					arr[j+1] = tempVar;//값 바꿔주기
    					flag = false;//한번이라도 자리교환을 해주면 아직 정렬이 안된것..	
    				}
    			}
    			if(flag) break;//한번도 자리교환을 안해주면 그대로 true일것. 그럼 종료
    		}
    		for(int i = 0; i<arr.length;i++) {
    			System.out.print(arr[i]+" ");
    		}
    	}
    
    }