공부/알고리즘, 자료구조

정렬 알고리즘

오잎 클로버 2022. 4. 28. 13:20
728x90

정렬을 해결하는 데 여러 알고리즘을 사용하고, 어떤 알고리즘이 어떤 상황에 적절한 상황인지는 판별하기 다소 어렵다.

물론 다음과 같은 표가 있어 어느 정도 유추는 가능하나, 앞서 말한 좋은 상황, 나쁜 상황을 알기에는 부족하다.

그렇기에 직접 자바로 이를 테스트를 진행할 프로그램을 작게나마 만들었다.

 

testcase패키지는 테스트 케이스이며 즉, 상황(문제)을 임의적으로 넣어둔 클래스들이 모여있다.

Sort 인터페이스는 모든 정렬 알고리즘의 공통 영역이다.

algorithm 패키지는 위 7가지 정렬 알고리즘을 구현한 클래스들이 모여있다.

StopWatch 클래스는 시간을 계산할 수 있는 클래스이다.

 

GitHub - iqpizza6349/sort-algorithm

Contribute to iqpizza6349/sort-algorithm development by creating an account on GitHub.

github.com

 

사람마다 환경에 따라 다를 순 있지만, 다음 표는 제 노트북에서 랜덤 값으로 10번 넣어 나온 최소, 최대, 평균입니다.

(1024개의 정수를 가진 1차원 배열을 정렬합니다. 각 정수는 랜덤값으로 들어갑니다.)

정렬 알고리즘 / 시간(단위: ms) 최소 최대 평균
삽입 정렬                 5                13                 7
선택 정렬                 5                 8                 6
버블 정렬                 7                14                 8
셸 정렬                 2                 9                3.5
퀵 정렬                 2                 9                3.1
힙 정렬                 2                10                3.6
병합 정렬                 3                16                6.6

더 좋은 케이스가 있으시면,

깃허브 fork 이후, 더 좋은 테스트 케이스를 작성한 후, PR 보내주세요.

 

 

이상입니다.