JAVA :: Test109_정렬 알고리즘(향상된 버블 정렬)

2023. 9. 13. 17:45· 📚 Study/Java
// 향상된 버블 정렬(Bubble Sort)
// ※ 앞에서 본 Selection Sort(Test107.java)나 Bubble Sort(Test108.java)의 성능은 같다.
// (→ 성능에 대한 추정 근거 : 반복문을 수행한 횟수)
// 하지만, 향상된 Bubble Sort 는 대상 데이터의 구조에 따라서
// 일반 Bubble Sort 나 Selection Sort 에 비해 성능이 좋을 수 있다.
// 원본 데이터 : 61 15 20 22 30
// 15 20 22 30 61 - 1회전 (스왑 발생 → true) → 다음 회전 진행 ○
// 15 20 22 30 61 - 2회전 (스왑 발생 → false) → 다음 회전 진행 Ⅹ
//==> 1회전 수행... 2회전 수행... 을 해 보았더니...
// 2회전에서 스왑(자리바꿈)이 전혀 일어나지 않았기 때문에
// 불필요한 추가 연산(더 이상의 회전)은 무의미한 것으로 판단하여
// 수행하지 않는다.
// 실행 예)
// Source Data : 10 50 20 30 40
// Sorted Data : 10 20 30 40 50
// 계속하려면 아무 키나 누르세요...
/*
10, 50, 20, 30, 40
== --
10, 20, 50, 30, 40
== --
10, 20, 30, 50, 40
== --
10, 20, 30, 40, 50
== --
------------------------------- 1회전 → 스왑 발생
10, 20, 30, 40, 50
== --
10, 20, 30, 40, 50
== --
10, 20, 30, 40, 50
== --
10, 20, 30, 40, 50
== --
------------------------------- 2회전 → 스왑 발생하지 않음
Ⅹ
Ⅹ
------------------------------- 3회전 → Ⅹ (할 필요 없음)
Ⅹ
------------------------------- 4회전 → Ⅹ (할 필요 없음)
*/
public class Test109
{
public static void main(String[] args)
{
int[] a = {10, 50, 20, 30, 40};
System.out.print("Source Data : ");
for (int n : a)
{
System.out.print(n + " ");
}
System.out.println();
// 정렬
// → 향상된 정렬
boolean flag;
int pass = 0;
do
{
flag = false; //-- 이번 회전에서자리바꿈이 발생하지 않을 것이다.
pass++;
for (int i=0; i<a.length-pass; i++)
{
// 테스트
// System.out.println("쑝~");
if (a[i] > a[i+1]) // 오름차순
{
a[i] = a[i]^a[i+1];
a[i+1] = a[i+1]^a[i];
a[i] = a[i]^a[i+1];
flag = true;
//-- 단 한번이라도 스왑(자리바꿈)이 발생하게 되면
// flag 변수는 true로 변경~!!!
}
}
}
while (flag);
//-- flag 변수가 false라는 것은
// 회전이 구분적으로 ㅂ라생하는 동안 스왑이 일어나지 않은 경우로
// 더 이상의 반복문 수행은 무의미한 것으로 판단 가능~!!!
System.out.print("Sorted Data : ");
for (int n : a)
{
System.out.print(n + " ");
}
System.out.println();
}
}
저작자표시 (새창열림)
'📚 Study/Java' 카테고리의 다른 글
  • JAVA :: Note#6 상속(Inheritance)
  • JAVA :: Test110_과제_정렬 알고리즘(학생의 데이터를 성적 데이터를 입력 받아 내림차순으로 출력하는 프로그램 구현)
  • JAVA :: Test108_정렬 알고리즘(버블 정렬)
  • JAVA :: Test107_정렬 알고리즘(선택 정렬)
bono-hye
bono-hye
bono-hye
공부를 합시다👩🏻‍💻
bono-hye
전체
오늘
어제
  • 분류 전체보기 (506)
    • 📚 Study (225)
      • Java (148)
      • Oracle (28)
      • JDBC (4)
      • Javascript (9)
      • JSP & Servlet (19)
      • JQuery (6)
      • Spring (9)
      • Springboot (0)
      • 개인 공부 (2)
    • ✏️ 문제풀이 (280)
      • 백준 (181)
      • 프로그래머스 (99)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리
hELLO · Designed By 정상우.v4.2.1
bono-hye
JAVA :: Test109_정렬 알고리즘(향상된 버블 정렬)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.