자바

버블 소팅

chantleman 2024. 7. 12. 18:17

배열 데이터 정렬할 때 쓰이는 방법중에는 버블 소팅이 있습니다. 

버블소팅을 통해 배열에 있는 데이터를 하나하나씩 비교해서 오름차순 혹은 내림차순으로 정렬시킬 수 있습니다. 

 

int [] arr = {90,80,70,69,50};
int cnt=0;
		
for(int i=0;i<arr.length-1;i++)
{
	for(int j=0;j<arr.length-1;j++)
	{
		cnt++;
		if(arr[j]<arr[j+1])
		{
			int temp=arr[j];
			arr[j]=arr[j+1];
			arr[j+1]=temp;
		}
	}
}
System.out.println("반복문 시행 횟수: "+cnt);

이렇게 하면 16번 반복실행하게 됩니다.

버블소팅은 하나하나씩 다 실행해보기 때문에 속도가 느립니다.

 

 

 

int [] arr = {90,80,70,69,50};
int cnt=0;
		
for(int i=0;i<arr.length-1;i++)
{
	boolean chk= true;
	for(int j=0;j<arr.length-1;j++)
	{
		cnt++;
		if(arr[j]<arr[j+1])
		{
			int temp=arr[j];
			arr[j]=arr[j+1];
			arr[j+1]=temp;
			chk=false;
		}
	}
	if(chk) break;
}
System.out.println("반복문 시행 횟수: "+cnt);

하지만 이런식으로 이미 배열이 정렬돼있을 때 불필요한 비교를 줄여주는 역할을 하므로써 속도를 줄일 수 있습니다.

 

 

또한 정렬을 쉽게 하기 위해서는 Arrays.sort()를 사용하는 방법이 있는데

 

int [] arr = {68,75,42,90,61};
		
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));

 

그냥 arr을 출력하게 되면 

이런 주소값이 나오기 때문에

Arrays.toString()을 통해서 배열을 문자열로 바꿔준 후에 출력해야합니다.

 

 

 

Integer [] arr={68,73,29,19,23};
Arrays.sort(arr, Collections.reverseOrder()); 	
System.out.println(Arrays.toString(arr2));

 

이건 collections을 사용해서 내림차순으로 정렬한 모습입니다.

주의할 점은 collections.reservseOrder()는 coparator를 반환하는데 

이 comparator는 객체를 비교합니다. 

기본형인 int는 객체가 아니기 때문에 collections.reverseOrder()와 함께 사용할 수 없어서

배열 선언할 때 Int 대신 Integer를 사용해야합니다.

'자바' 카테고리의 다른 글

점3개로 삼각형 넓이 구하기 예제  (1) 2024.07.15
constructor, 생성자  (0) 2024.07.15
버블 소팅 이용한 로또 예제  (0) 2024.07.12
배열 복사  (0) 2024.07.12
필드  (0) 2024.07.12