μ‹œλ„/ꡭ비지원

[D+13] Sort, Bubble Sort

πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2022. 10. 10. 10:37

 

 

Algorithm

-  Sort, Bubble Sort -

 


 

Sort

SortλŠ” 데이터λ₯Ό 기쀀에 따라 μž¬λ°°μΉ˜ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.

 

λͺ©μ ) 

- Searching을 잘 ν•˜κΈ° μœ„ν•΄μ„œ

- λ¬΄μ°¨λ³„μ μœΌλ‘œ λ‚˜μ—΄λ˜μ–΄μžˆλŠ” 데이터 λ³΄λ‹€λŠ” μ–΄λ– ν•œ 기쀀에 λ§žμΆ”μ–΄ λ‚˜μ—΄λ˜μ–΄μžˆλŠ” 것이 νŠΉμ • 데이터λ₯Ό μ°ΎλŠ”λ° 훨씬 μˆ˜μ›”ν•˜λ‹€.

 

νŠΉμ§•)

β‘  λ°μ΄ν„°μ˜ μœ„μΉ˜λ§Œ λ°”λ€ŒλŠ” 것이지 λ°μ΄ν„°μ˜ 양이 λ°”λ€ŒλŠ” 것이 μ•„λ‹ˆλ‹€.

β‘‘ λ‹€μ–‘ν•œ 기쀀이 μ‘΄μž¬ν•œλ‹€. ex) μ˜€λ¦„μ°¨μˆœ, λ‚΄λ¦Όμ°¨μˆœ λ“±λ“±...

 

 


Bubble Sort

- μ„œλ‘œ μΈμ ‘ν•œ μœ„μΉ˜μ— μžˆλŠ” 두 값을 λΉ„κ΅ν•˜μ—¬ 크기가 μˆœμ„œλŒ€λ‘œ λ˜μ–΄μžˆμ§€ μ•Šμ„ 경우 μœ„μΉ˜λ₯Ό λ³€κ²½ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜

- (λ§ˆμ§€λ§‰-1)번째의 κ°’κ³Ό λ§ˆμ§€λ§‰λ²ˆμ§Έμ— μžˆλŠ” 값을 μ΅œμ’…μ μœΌλ‘œ λΉ„κ΅ν•˜κ³  λ‚˜λ©΄ 1νšŒμ „μ΄ λλ‚œκ²ƒμ΄λ©°, μ΄λ•Œ μ˜€λ¦„μ°¨μˆœ κΈ°μ€€μœΌλ‘œ κ°€μž₯ λ§ˆμ§€λ§‰μ— μžˆλŠ” 값은 κ°€μž₯ 큰 값이 λ°°μΉ˜λ˜μ–΄μžˆλ‹€.

- λ§ˆμ§€λ§‰μ— 배치된 값은 정렬이 μ™„λ£Œλœ κ²ƒμœΌλ‘œ 보기 λ•Œλ¬Έμ— 이후에 더이상 크기λ₯Ό λΉ„κ΅ν•˜λŠ” λŒ€μƒμ—μ„œ μ œμ™Έλœλ‹€.

- μ–΄λŠμ •λ„ νšŒμ „μ„ λ‹€ 돌고 λ‚˜μ„œ 1번째의 κ°’λ§Œ λ‚¨μ„κ²½μš° 데이터가 ν•˜λ‚˜λ°–μ— μ—†μ–΄ 더이상 비ꡐ할 λŒ€μƒμ΄ μ—†κΈ° λ•Œλ¬Έμ— μ •λ ¬ν•˜μ§€ μ•Šκ³  μ’…λ£Œν•œλ‹€.

 

μ˜ˆμ‹œλ₯Ό 보면 μ΄λŸ°μ‹μœΌλ‘œ ν•œλ²ˆ νšŒμ „μ΄ 끝이 λ‚ λ•Œλ§ˆλ‹€ 끝의 값이 κ³ μ •λ˜κ³  더이상 λΉ„κ΅ν•˜μ§€ μ•ŠλŠ” 것을 확인할 수 있으며, 결둠적으둜 λ²„λΈ”μ •λ ¬μ˜ μ΅œμ’… λͺ©μ μ€ 끝의 값을 κ²°μ •ν•˜κΈ° μœ„ν•΄μ„œλΌκ³  ν•  수 μžˆλ‹€.

 

• κ΅¬ν˜„μ½”λ“œ

BubbleSort Class

public class BubbleSort3 {

	// λ³€μˆ˜ μ„ μ–Έ
	private int[] arr;
	private int sortBy;
	
	///////////////////////////////////////////////////////////////////////////////////
	// Setter
	
	public void setArr(int[] arr)
	{
		this.arr = arr;
	}
	
	public void setSortBy(int sortBy)
	{
		this.sortBy = sortBy;
	}
	
	///////////////////////////////////////////////////////////////////////////////////
	// Getter
	
	public int[] getArr()
	{
		return arr;
	}
	
	public int getSortBy()
	{
		return sortBy;
	}
	
	///////////////////////////////////////////////////////////////////////////////////
	// Check sortBy
	
	public boolean agreeSortBy(int num)
	{
		if((num == 1) || (num == 2))
			return true;
		
		else return false;
	}
	
	///////////////////////////////////////////////////////////////////////////////////
	// Sort
	
	public void startSort()
	{
		if(getSortBy() == 1) ascSort();
		else descSort();
	}
	
	public void ascSort()
	{
		int compareCnt = arr.length - 1;
		int box;
		
		for(int i = 0; i < arr.length - 1; i++)
		{
			for(int j = 0; j < compareCnt; j++)
			{
				if(arr[j] > arr[j+1])
				{
					box = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = box;
				}
			}
			
			compareCnt--;
		}
	}
	
	public void descSort()
	{
		int compareCnt = arr.length - 1;
		int box;
		
		for(int i = 0; i < arr.length - 1; i++)
		{
			for(int j = 0; j < compareCnt; j++)
			{
				if(arr[j] < arr[j+1])
				{
					box = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = box;
				}
			}
			
			compareCnt--;
		}
	}
	
	
	///////////////////////////////////////////////////////////////////////////////////
	// Print arr
	
	public void printArr()
	{
		for(int i = 0; i < arr.length; i++)
		{
			System.out.print(arr[i] + " ");
		}
	}
	
}

 

main()

import java.util.Scanner;

/*
 * 1. μ‚¬μš©μžμ—κ²Œ 숫자λ₯Ό μž…λ ₯λ°›μœΌμ‹œμ˜€
 * κ·Έ 숫자만큼 int 배열을 ν• λ‹Ήν•˜μ‹œμ˜€ (예 10을 μž…λ ₯ν•˜λ©΄ int[10])
 * 2. μ‚¬μš©μžμ—κ²Œ μ •λ ¬κΈ°μ€€ (μ˜€λ¦„μ°¨μˆœ/λ‚΄λ¦Όμ°¨μˆœ)을 μž…λ ₯λ°›μœΌμ‹œμ˜€ 
 * 3. int 배열을 1 ~ 100 μ‚¬μ΄μ˜ μž„μ˜μ˜ κ°’μœΌλ‘œ μ„€μ •ν•˜μ‹œμ˜€ 
 * 4. 이 배열을 μ‚¬μš©μžμ—κ²Œ 받은 정렬기쀀에 따라 λ²„λΈ”μ†ŒνŠΈλ₯Ό μˆ˜ν–‰ν•˜μ‹œμ˜€ 
 */

public class Test3 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		BubbleSort3 bs = new BubbleSort3();
		
		// 1> μ‚¬μš©μžμ—κ²Œ μ‚¬μ΄μ¦ˆ 크기 및 μ •λ ¬κΈ°μ€€ μž…λ ₯λ°›κΈ° 
		
		System.out.print("μ›ν•˜λŠ” λ°°μ—΄μ˜ 크기λ₯Ό μž…λ ₯ν•΄ μ£Όμ„Έμš” : ");
		int size = scan.nextInt();		// λ°°μ—΄μ˜ μ‚¬μ΄μ¦ˆ 
		
		System.out.print("μ›ν•˜μ‹œλŠ” 정렬기쀀을 μ°Έκ³ ν•˜μ—¬ μž…λ ₯ν•΄ μ£Όμ„Έμš” (1: μ˜€λ¦„μ°¨μˆœ, 2: λ‚΄λ¦Όμ°¨μˆœ) : ");
		int sortBy = scan.nextInt();	// μ •λ ¬κΈ°μ€€ (1: μ˜€λ¦„μ°¨μˆœ, 2: λ‚΄λ¦Όμ°¨μˆœ)
		
		// ++ μ˜¬λ°”λ₯Ό 정렬기쀀을 μž…λ ₯ν–ˆλŠ”μ§€ ν™•μΈν•˜κΈ°
		
		while(bs.agreeSortBy(sortBy) == false)
		{
			System.out.println("μ •λ ¬ 기쀀을 λ‹€μ‹œ ν™•μΈν•΄μ£Όμ„Έμš”");
			System.out.println("");
			
			System.out.print("μ›ν•˜μ‹œλŠ” 정렬기쀀을 μ°Έκ³ ν•˜μ—¬ μž…λ ₯ν•΄ μ£Όμ„Έμš” (1: μ˜€λ¦„μ°¨μˆœ, 2: λ‚΄λ¦Όμ°¨μˆœ) : ");
			sortBy = scan.nextInt();
			
			if(bs.agreeSortBy(sortBy) == true)
				break;
		}

		
		///////////////////////////////////////////////////////////////////////////////////
		// 2> 배열에 1 ~ 100 μ‚¬μ΄μ˜ μž„μ˜μ˜κ°’ μ„€μ •ν•˜κΈ°
		
		int arr[] = new int[size];
		
		for(int i = 0; i < size; i++)
		{
			arr[i] = (int)(Math.random() * 100) + 1;
		}
		
		///////////////////////////////////////////////////////////////////////////////////
		// 3> 클래슀λ₯Ό new둜 νž™μ— ν• λ‹Ήν•œ ν›„ λ©”μ†Œλ“œ μ‚¬μš©ν•˜κΈ°
		 
		bs.setSortBy(sortBy);
		bs.setArr(arr);
		bs.startSort();
		
		bs.printArr();
		 
	}

}

 

 

λ°˜μ‘ν˜•