앱 개발에서 정렬 직접 사용해본 후기

앱을 개발하다 보면 데이터를 특정 기준에 맞춰 보여줘야 하는 일이 굉장히 많습니다. 게임에서는 점수가 높은 사용자를 위에 보여줘야 하고, 메시지 앱에서는 작성 시간이 빠른 메시지부터 차례대로 보여줘야 합니다. 쇼핑몰에서는 가격이 낮은 상품부터 보여주는 기능도 필요합니다.

이런 기능을 만들면서 버블 정렬, 삽입 정렬, 선택 정렬을 각각 적용해봤습니다.

단순히 결과만 보면 세 방법 모두 원하는 순서대로 데이터를 보여줄 수 있었습니다. 하지만 데이터를 계속 추가하고 값을 변경해보니 사용하는 느낌은 꽤 달랐습니다.

특히 이미 나열된 데이터에서 값 하나만 바뀌는 경우와 처음부터 뒤섞인 데이터를 한 번에 나열하는 경우의 차이가 컸습니다.

게임 점수, 메시지 시간, 쇼핑몰 가격 세 가지 기능에 각각 버블 정렬, 삽입 정렬, 선택 정렬을 적용하면서 어떤 차이가 있었는지 적어보겠습니다.

게임점수 랭킹기능 개발

먼저 게임 점수에 따라 사용자를 높은 점수부터 보여주는 랭킹 화면을 만들었습니다.

처음 넣은 데이터는 다음과 같았습니다.

사용자 점수
민수72
지훈95
서연81
유진64
현우88
수빈77

점수가 높은 사용자가 위에 나오도록 하면 다음과 같이 표시됩니다.

순위 사용자 점수
1지훈95
2현우88
3서연81
4수빈77
5민수72
6유진64

처음 한 번 데이터를 나열했을 때는 세 정렬 모두 크게 불편한 점이 없었습니다.

차이를 느낀 것은 게임을 계속 진행하면서 사용자의 점수가 바뀌게 만들었을 때였습니다. 민수가 다시 게임을 플레이해서 점수가 72점에서 90점으로 올라가도록 했습니다. 기존 순위에서는 민수가 5위였지만 점수가 변경된 뒤에는 2위로 올라가야 했습니다.

게임점수 버블정렬 적용경험

버블 정렬에서는 옆에 있는 사용자와 점수를 비교하고 순서가 맞지 않으면 자리를 바꾸도록 구현했습니다.

민수의 점수가 90점으로 변경된 직후에는 다음과 같은 상태였습니다.

순위 사용자 점수
1지훈95
2현우88
3서연81
4수빈77
5민수90
6유진64

정렬을 실행하니 민수의 90점과 수빈의 77점이 먼저 비교됐습니다. 민수의 점수가 더 높았기 때문에 자리가 바뀌었고, 그다음에는 서연의 81점과 비교됐습니다. 여기서도 민수가 더 높아 다시 자리가 바뀌었습니다.

마지막으로 현우의 88점과 비교했고 민수가 더 높았기 때문에 한 번 더 위치가 바뀌었습니다.

순위 사용자 점수
1지훈95
2민수90
3현우88
4서연81
5수빈77
6유진64

직접 적용했을 때 버블 정렬의 가장 큰 장점은 확인하기 쉽다는 점이었습니다. 어떤 사용자와 어떤 사용자가 비교되는지 눈으로 보기 좋았고, 잘못된 값이 있으면 어느 비교에서 문제가 생겼는지 찾기도 편했습니다.

랭킹에서 사용자가 한 단계씩 올라가는 애니메이션을 붙일 때도 잘 어울렸습니다. 민수가 5위에서 바로 2위로 이동하는 것이 아니라 5위에서 4위, 4위에서 3위, 3위에서 2위로 올라가는 모습을 표현하기 쉬웠습니다.

하지만 사용자를 늘려보니 단점도 분명했습니다. 한 사용자의 점수만 바뀌었는데도 여러 사용자의 점수를 반복해서 비교했습니다. 사용자 수가 적을 때는 크게 신경 쓰이지 않았지만 데이터 수를 늘리자 필요 없는 비교가 많아졌습니다.

좋았던 점 아쉬웠던 점
구현이 단순했습니다. 사용자 수가 늘수록 비교가 많아졌습니다.
비교되는 대상을 확인하기 쉬웠습니다. 한 명의 점수만 변경돼도 여러 값을 다시 비교했습니다.
순위 이동 애니메이션과 잘 맞았습니다. 이미 순서가 맞는 데이터도 다시 확인하게 됐습니다.

게임 랭킹을 처음 구현하면서 동작을 확인하는 용도로는 상당히 편했습니다. 반면 사용자 수가 많아지는 랭킹 기능에서 계속 사용하고 싶은 방법은 아니었습니다.

게임점수 삽입정렬 적용경험

같은 랭킹에 삽입 정렬도 적용했습니다.

이미 랭킹은 점수순으로 나열되어 있었고 민수의 점수만 72점에서 90점으로 변경됐습니다. 이때 민수가 새로운 점수에 맞는 위치를 찾도록 했습니다.

지훈의 95점보다는 낮고 현우의 88점보다는 높았기 때문에 민수를 두 사용자 사이에 넣었습니다.

순위 사용자 점수
1지훈95
2민수90
3현우88
4서연81
5수빈77
6유진64

게임을 여러 번 실행하면서 점수를 계속 변경해보니 삽입 정렬이 상당히 편했습니다.

랭킹은 한 번 만들어진 뒤 모든 사용자의 점수가 동시에 뒤섞이기보다는 특정 사용자의 점수만 바뀌는 일이 많았습니다. 한 사용자가 게임을 다시 플레이해서 점수가 변경되면 그 사용자가 들어갈 새로운 위치를 잡아주면 됐습니다.

70점이었던 사용자를 75점으로 변경하고, 다음에는 82점, 다시 91점으로 바꾸면서 여러 번 테스트했습니다. 이런 경우에는 기존 랭킹을 그대로 이용하면서 해당 사용자만 새로운 위치로 옮기는 방식이 편했습니다.

좋았던 점 아쉬웠던 점
기존 랭킹을 활용하기 좋았습니다. 처음부터 모든 데이터가 뒤섞여 있으면 장점이 줄었습니다.
특정 사용자의 점수 변경에 잘 맞았습니다. 데이터가 매우 많다면 더 적합한 방법을 고민해야 했습니다.
반복 플레이 후 순위 변경을 처리하기 편했습니다. 버블 정렬보다 처음 구현할 때 확인할 부분이 조금 더 있었습니다.

게임 랭킹에서는 세 가지 중 삽입 정렬을 가장 편하게 사용했습니다.

게임점수 선택정렬 적용경험

선택 정렬도 같은 랭킹에 적용했습니다.

전체 사용자 중 가장 높은 점수를 가진 사용자를 먼저 찾아 1위에 배치했습니다. 그다음 남아 있는 사용자 중 가장 높은 점수를 다시 찾아 2위에 배치했습니다. 이런 식으로 3위, 4위를 차례대로 결정했습니다.

게임 랭킹이라는 기능과는 잘 맞았습니다. 실제 랭킹도 가장 높은 점수가 1위이고 그다음으로 높은 점수가 2위이기 때문에 코드를 다시 봤을 때 어떤 작업을 하는지 바로 알 수 있었습니다.

처음 사용자 데이터를 받아 한 번 랭킹을 만드는 작업에서는 크게 불편하지 않았습니다.

다만 점수 변경이 자주 발생하자 아쉬움이 생겼습니다. 이미 대부분 순위가 맞는 상태인데 한 사람의 점수만 바뀌어도 다시 높은 점수를 찾아가며 비교하게 됐습니다.

좋았던 점 아쉬웠던 점
1위부터 찾는 방식이라 이해하기 쉬웠습니다. 기존 랭킹을 충분히 활용하기 어려웠습니다.
최초 랭킹 생성에는 사용하기 편했습니다. 점수가 계속 변경되는 상황에서는 비교가 많았습니다.
값 교환 횟수는 비교적 적었습니다. 실시간 랭킹 갱신에는 아쉬움이 있었습니다.

게임랭킹 정렬방법 최종선택

게임 랭킹에서는 삽입 정렬이 가장 잘 맞았습니다.

정렬 방법 실제 적용 후 판단
버블 정렬 순위가 한 단계씩 바뀌는 모습을 확인하기 좋았지만 비교가 많았습니다.
삽입 정렬 기존 랭킹에서 변경된 사용자의 위치를 다시 잡기 편했습니다.
선택 정렬 처음 순위를 만들 때는 이해하기 쉬웠지만 반복 변경에는 불편했습니다.

제가 만든 랭킹에서는 게임을 플레이할 때마다 특정 사용자의 점수가 계속 변경됐습니다. 그래서 이미 만들어진 랭킹을 이용할 수 있는 삽입 정렬이 가장 잘 맞았습니다.

메시지앱 시간순목록 개발

다음으로 메시지를 시간순으로 보여주는 기능을 만들었습니다.

메시지를 작성하면 작성 시간과 함께 저장하고 오래된 메시지부터 최신 메시지까지 차례대로 보여주도록 했습니다.

시간 사용자 메시지
10:01민수안녕하세요
10:02지훈오늘 뭐 하세요?
10:04민수점심 먹을까요?
10:05지훈좋아요

여기에 10시 3분으로 설정한 메시지를 마지막에 추가했습니다.

입력 순서 시간 메시지
110:01안녕하세요
210:02오늘 뭐 하세요?
310:04점심 먹을까요?
410:05좋아요
510:03회사 근처에서 볼까요?

화면에서는 10시 3분 메시지가 10시 2분과 10시 4분 사이에 들어가야 했습니다.

메시지시간 버블정렬 적용경험

버블 정렬을 적용하니 마지막에 추가된 10시 3분 메시지가 앞에 있는 메시지와 시간을 비교하면서 이동했습니다.

먼저 10시 5분 메시지와 비교해서 위치가 바뀌었고, 그다음 10시 4분 메시지와 다시 비교해 앞으로 이동했습니다.

시간 메시지
10:01안녕하세요
10:02오늘 뭐 하세요?
10:03회사 근처에서 볼까요?
10:04점심 먹을까요?
10:05좋아요

메시지가 몇 개 없을 때는 별다른 불편이 없었습니다.

하지만 테스트 메시지를 계속 추가하면서 차이가 보였습니다. 대부분의 메시지는 처음부터 시간순으로 들어왔는데 새로운 메시지 하나를 추가한 뒤 전체 목록에 버블 정렬을 다시 실행하면 이미 순서가 맞는 메시지도 반복해서 비교했습니다.

좋았던 점 아쉬웠던 점
시간 비교 방식이 단순했습니다. 메시지가 많아질수록 비교도 많아졌습니다.
잘못된 위치의 메시지가 이동하는 것을 확인하기 쉬웠습니다. 기존 메시지가 이미 시간순이어도 다시 비교했습니다.
소량 메시지에서는 충분히 사용할 수 있었습니다. 새 메시지가 계속 들어오는 기능과는 잘 맞지 않았습니다.

메시지시간 삽입정렬 적용경험

메시지 앱에서는 삽입 정렬을 사용했을 때 차이가 가장 분명했습니다.

기존 메시지는 이미 시간순으로 나열되어 있었습니다. 10시 3분 메시지가 추가되면 해당 메시지가 들어갈 위치만 찾았습니다.

10시 2분보다는 늦고 10시 4분보다는 빠르기 때문에 두 메시지 사이에 넣었습니다.

시간 메시지
10:01안녕하세요
10:02오늘 뭐 하세요?
10:03회사 근처에서 볼까요?
10:04점심 먹을까요?
10:05좋아요

메시지를 계속 추가해보니 삽입 정렬이 이런 데이터에서 편한 이유가 더 분명해졌습니다.

10시 6분 메시지가 들어오면 마지막에 그대로 붙었고 10시 7분 메시지도 마지막에 붙었습니다. 반대로 뒤늦게 10시 3분 30초 메시지를 넣으면 10시 3분과 10시 4분 사이의 위치를 찾아 넣었습니다.

기존 메시지가 이미 시간순이라는 점을 그대로 이용할 수 있었습니다. 새 메시지가 가장 최신 시간이라면 이동시킬 데이터 자체가 거의 없었습니다.

좋았던 점 아쉬웠던 점
기존 시간순 메시지를 그대로 활용했습니다. 아주 오래된 메시지가 뒤늦게 들어오면 이동할 데이터가 많아질 수 있습니다.
최신 메시지는 마지막에 바로 추가할 수 있었습니다. 처음부터 메시지가 전부 뒤섞여 있다면 장점이 줄었습니다.
중간 시간 메시지를 적절한 위치에 넣기 편했습니다. 메시지가 매우 많다면 더 효율적인 처리 방법이 필요할 수 있습니다.

메시지 앱에서는 삽입 정렬이 세 가지 중 가장 잘 맞았습니다.

메시지시간 선택정렬 적용경험

선택 정렬에서는 가장 오래된 메시지를 먼저 찾았습니다.

전체 메시지에서 작성 시간이 가장 빠른 메시지를 찾아 첫 번째에 배치하고, 남아 있는 메시지에서 다시 가장 빠른 메시지를 찾아 두 번째에 배치했습니다.

결과는 정확했지만 메시지를 계속 추가해보니 불편했습니다.

이미 10시 1분부터 10시 30분까지 메시지가 시간순으로 나와 있는데 10시 31분 메시지 하나가 새로 추가됐다고 해서 처음 메시지부터 다시 비교하는 것은 필요 없는 작업이 많았습니다.

좋았던 점 아쉬웠던 점
가장 오래된 메시지부터 찾는 방식이 이해하기 쉬웠습니다. 기존 시간순 목록의 이점을 이용하기 어려웠습니다.
처음 한 번 데이터를 나열할 때는 문제없었습니다. 새로운 메시지가 계속 추가될 때 불편했습니다.
결과 자체는 정확했습니다. 데이터가 늘어나면 비교가 많아졌습니다.

메시지앱 정렬방법 최종선택

메시지 앱에서는 삽입 정렬이 가장 좋았습니다.

정렬 방법 실제 적용 후 판단
버블 정렬 정상적으로 동작했지만 기존 메시지까지 다시 비교했습니다.
삽입 정렬 새 메시지가 들어갈 위치만 찾을 수 있어 가장 편했습니다.
선택 정렬 한 번 나열할 때는 괜찮았지만 지속적인 추가에는 불편했습니다.

쇼핑몰 가격순목록 개발

마지막으로 상품 가격을 낮은 순서대로 보여주는 기능을 만들었습니다.

상품 이름과 가격을 저장하고 가격 낮은 순 버튼을 누르면 저렴한 상품부터 표시되도록 했습니다.

상품 가격
무선 키보드49,000원
게이밍 마우스32,000원
USB 허브19,000원
모니터 받침대27,000원
웹캠58,000원
마우스패드12,000원

가격순으로 표시하면 다음과 같이 나왔습니다.

순위 상품 가격
1마우스패드12,000원
2USB 허브19,000원
3모니터 받침대27,000원
4게이밍 마우스32,000원
5무선 키보드49,000원
6웹캠58,000원

상품가격 버블정렬 적용경험

버블 정렬에서는 옆에 있는 두 상품 가격을 비교했습니다. 왼쪽 상품 가격이 더 높으면 두 상품 위치를 바꿨습니다.

49,000원짜리 무선 키보드와 32,000원짜리 게이밍 마우스를 비교하면 무선 키보드가 더 비싸기 때문에 두 상품이 자리를 바꿨습니다. 이런 작업을 반복하면서 가격이 높은 상품이 뒤쪽으로 이동했습니다.

상품이 6개일 때는 전혀 문제가 없었습니다. 코드도 단순했고 원하는 결과가 바로 나왔습니다.

하지만 테스트 상품을 계속 추가하면서 비교 횟수가 상당히 많아졌습니다. 이미 가격순으로 표시된 상태에서 상품 하나를 새로 추가한 뒤 전체 버블 정렬을 다시 실행했을 때 필요 없는 작업이 많았습니다.

좋았던 점 아쉬웠던 점
가격 비교 코드를 구현하기 쉬웠습니다. 상품 수가 늘면서 비교 횟수가 빠르게 늘었습니다.
상품이 이동하는 모습을 확인하기 쉬웠습니다. 상품 위치 교환도 자주 발생했습니다.
상품이 적을 때는 문제없이 사용했습니다. 상품이 많은 화면에서는 사용하기 부담스러웠습니다.

상품가격 삽입정렬 적용경험

가격순 목록을 만든 뒤 삽입 정렬도 사용했습니다.

기존 상품은 이미 가격이 낮은 순서로 표시되어 있었습니다. 여기에 29,000원짜리 블루투스 스피커를 새로 추가했습니다.

상품 가격
마우스패드12,000원
USB 허브19,000원
모니터 받침대27,000원
게이밍 마우스32,000원
무선 키보드49,000원
웹캠58,000원

새로 추가한 블루투스 스피커는 27,000원보다 비싸고 32,000원보다 저렴했습니다. 그래서 두 상품 사이에 넣었습니다.

상품 가격
마우스패드12,000원
USB 허브19,000원
모니터 받침대27,000원
블루투스 스피커29,000원
게이밍 마우스32,000원
무선 키보드49,000원
웹캠58,000원

상품 추가뿐 아니라 가격 변경 기능에서도 편했습니다.

49,000원이던 무선 키보드를 25,000원으로 변경했을 때 기존 위치에서 꺼낸 뒤 새로운 가격에 맞는 곳으로 옮겼습니다. 이미 가격순으로 표시되어 있는 상품을 이용해서 새로운 위치를 잡을 수 있다는 점이 편했습니다.

좋았던 점 아쉬웠던 점
새 상품을 추가하기 편했습니다. 처음 상품 데이터가 전부 뒤섞여 있으면 작업이 많았습니다.
할인이나 가격 변경을 반영하기 좋았습니다. 상품 수가 아주 많다면 다른 방법이 필요할 수 있습니다.
기존 가격순 목록을 활용할 수 있었습니다. 최초 전체 상품 배치에서는 장점이 상대적으로 작았습니다.

상품가격 선택정렬 적용경험

선택 정렬은 쇼핑몰 가격순 기능에서 이해하기 가장 쉬웠습니다.

전체 상품 중 가장 싼 상품을 먼저 찾았습니다. 12,000원짜리 마우스패드가 가장 저렴했기 때문에 첫 번째에 배치했습니다.

남은 상품 중에서는 19,000원짜리 USB 허브가 가장 저렴했기 때문에 두 번째에 배치했습니다. 그다음 27,000원, 32,000원 순서로 계속 찾았습니다.

가격 낮은 순이라는 기능과 방법 자체가 잘 맞았습니다. 현재 남아 있는 상품 중 가장 싼 상품을 찾는 방식이라 코드를 다시 봐도 어떤 일을 하는지 바로 알 수 있었습니다.

다만 상품 추가와 가격 변경을 반복하니 단점도 보였습니다. 이미 가격순으로 상품이 나와 있는데 새로운 상품 하나가 들어올 때마다 기존 상품을 계속 비교해야 했습니다.

좋았던 점 아쉬웠던 점
최저가 상품부터 찾는 방식이 직관적이었습니다. 이미 가격순이어도 비교가 계속 발생했습니다.
코드가 어떤 일을 하는지 알아보기 쉬웠습니다. 상품이 자주 추가되면 불편했습니다.
버블 정렬보다 위치 교환은 적었습니다. 상품 수가 많아질수록 부담이 커졌습니다.

쇼핑몰 정렬방법 최종선택

쇼핑몰에서도 삽입 정렬이 가장 편했습니다.

정렬 방법 실제 적용 후 판단
버블 정렬 상품이 늘수록 비교와 위치 교환이 많아졌습니다.
삽입 정렬 상품 추가와 가격 변경에 가장 편했습니다.
선택 정렬 최저가부터 찾는 방식은 이해하기 쉬웠지만 반복 변경에는 불편했습니다.

처음 상품 데이터를 한 번만 가격순으로 보여주는 기능이라면 선택 정렬도 사용할 만했습니다. 하지만 상품 등록과 가격 변경까지 넣어보니 삽입 정렬 쪽이 훨씬 잘 맞았습니다.

세가지 앱 적용결과 비교

버블 정렬 삽입 정렬 선택 정렬 가장 좋았던 방법
게임 랭킹 순위 이동 확인이 쉬웠지만 비교가 많았습니다. 점수 변경 후 위치를 다시 잡기 편했습니다. 최초 순위 계산은 이해하기 쉬웠습니다. 삽입 정렬
메시지 앱 기존 메시지까지 반복 비교했습니다. 새 메시지를 시간에 맞게 넣기 편했습니다. 메시지가 계속 추가될 때 불편했습니다. 삽입 정렬
쇼핑몰 상품 수가 늘면서 부담이 커졌습니다. 상품 추가와 가격 변경에 편했습니다. 최저가부터 찾는 방식은 직관적이었습니다. 삽입 정렬

세 기능에서 모두 삽입 정렬을 가장 좋게 평가했지만 이유는 조금씩 달랐습니다.

게임 랭킹에서는 사용자의 점수가 계속 변경됐습니다. 메시지 앱에서는 기존 메시지가 이미 시간순으로 나와 있었고 새로운 메시지가 하나씩 추가됐습니다. 쇼핑몰에서는 가격순 목록을 만든 뒤 새로운 상품을 등록하거나 기존 상품 가격을 변경했습니다.

제가 만든 세 기능 모두 이미 나열된 데이터를 유지하면서 일부 데이터가 새로 들어오거나 변경되는 일이 많았습니다. 이 경우에는 삽입 정렬이 사용하기 편했습니다.

버블정렬 직접사용 후기

버블 정렬은 세 가지 중 구현 난도가 가장 낮았습니다.

두 값을 비교해서 순서가 맞지 않으면 자리를 바꾸면 됐습니다. 코드를 실행하면서 비교 대상이 무엇인지 확인하기도 편했습니다.

게임 랭킹처럼 사용자가 한 단계씩 올라가는 모습을 보여줄 때는 오히려 장점이 있었습니다.

다만 데이터가 많아지면 같은 데이터를 여러 번 비교하는 일이 많았습니다. 작은 데이터에서는 괜찮았지만 앱에서 데이터가 계속 늘어나는 상황을 만들자 굳이 버블 정렬을 계속 사용할 이유는 적었습니다.

삽입정렬 직접사용 후기

세 가지 중 실제 기능에 적용하면서 가장 편했던 것은 삽입 정렬이었습니다.

이미 어느 정도 순서대로 나와 있는 데이터에 새로운 데이터가 들어오는 경우에 특히 좋았습니다.

게임에서는 점수가 바뀐 사용자의 새 순위를 잡았고, 메시지에서는 새 메시지가 들어갈 시간을 찾았습니다. 쇼핑몰에서는 새 상품이나 가격이 변경된 상품이 들어갈 위치를 잡았습니다.

제가 만든 기능에서는 데이터를 한 번 보여주고 끝나는 것이 아니라 계속 값이 추가되고 변경됐기 때문에 삽입 정렬의 장점을 자주 활용할 수 있었습니다.

선택정렬 직접사용 후기

선택 정렬은 코드를 읽었을 때 어떤 일을 하는지 가장 쉽게 알 수 있었습니다.

게임에서는 가장 높은 점수를 찾고, 쇼핑몰에서는 가장 저렴한 가격을 찾았습니다.

처음 데이터를 한 번 나열하는 기능에서는 불편하지 않았습니다. 하지만 이미 데이터가 원하는 순서에 가깝게 나와 있어도 비교 횟수가 크게 줄지 않는 점은 아쉬웠습니다.

데이터가 계속 추가되고 값이 변경되는 앱에서는 삽입 정렬보다 사용하기 불편했습니다.

결론

게임 랭킹, 메시지 시간순 목록, 쇼핑몰 가격순 기능에 버블 정렬, 삽입 정렬, 선택 정렬을 각각 적용해보니 결과는 같아도 사용하기 편한 상황은 달랐습니다. 버블 정렬은 구현이 단순했고, 선택 정렬은 가장 큰 값이나 작은 값을 찾는 방식이 직관적이었습니다. 제가 만든 기능에서는 기존 데이터에 값이 계속 추가되거나 변경되는 경우가 많아서 삽입 정렬이 가장 잘 맞았습니다.

FAQ

버블 정렬은 실제 앱 개발에서도 사용할 수 있나요?

사용할 수 있습니다. 특히 데이터가 적거나 두 값을 비교하면서 위치가 바뀌는 모습을 직접 보여줘야 하는 기능에서는 활용하기 편합니다. 다만 데이터가 많아질수록 비교와 위치 교환 횟수가 늘어나기 때문에 대량 데이터를 다루는 기능에는 잘 사용하지 않는 편입니다.

게임 랭킹에서는 왜 삽입 정렬이 가장 편했나요?

게임 랭킹은 이미 점수순으로 사용자가 배치된 상태에서 특정 사용자의 점수만 변경되는 일이 많았습니다. 삽입 정렬을 사용하면 기존 랭킹을 그대로 이용하면서 점수가 바뀐 사용자가 들어갈 새 위치만 찾으면 돼서 편했습니다.

메시지 앱에서는 왜 삽입 정렬이 잘 맞았나요?

메시지는 대부분 이미 시간순으로 쌓이고 새로운 메시지가 하나씩 추가됐습니다. 최신 메시지는 마지막에 바로 넣을 수 있었고, 이전 시간의 메시지가 늦게 들어온 경우에는 해당 메시지가 들어갈 위치만 찾으면 됐습니다.

쇼핑몰 가격순에서는 선택 정렬이 더 어울리지 않나요?

가장 저렴한 상품부터 하나씩 찾는다는 점에서는 선택 정렬이 잘 어울렸습니다. 처음 상품을 한 번 가격순으로 보여줄 때는 사용하기 괜찮았습니다. 하지만 새 상품 추가와 가격 변경까지 반복해보니 기존 가격순 목록을 이용할 수 있는 삽입 정렬이 더 편했습니다.

버블 정렬의 가장 큰 장점은 무엇이었나요?

구현이 단순하고 어떤 데이터끼리 비교되는지 확인하기 쉬웠습니다. 게임 랭킹에서 사용자가 한 단계씩 순위가 올라가는 모습을 표현할 때도 잘 맞았습니다.

버블 정렬의 가장 큰 단점은 무엇이었나요?

데이터가 많아질수록 비교와 위치 교환이 많이 발생했습니다. 이미 대부분 순서가 맞는 상태에서도 여러 값을 반복해서 확인하게 되는 부분이 아쉬웠습니다.

선택 정렬은 어떤 기능에서 사용하기 편했나요?

가장 높은 점수, 가장 낮은 가격처럼 특정 값을 하나씩 찾아야 하는 기능에서 이해하기 편했습니다. 게임 랭킹의 1위부터 차례대로 찾거나 쇼핑몰에서 가장 저렴한 상품부터 찾는 기능과 잘 맞았습니다.

삽입 정렬은 언제 사용하기 좋았나요?

이미 어느 정도 순서대로 나열된 데이터에 새로운 값이 들어오거나 기존 값이 변경될 때 사용하기 좋았습니다. 게임 점수 변경, 새 메시지 추가, 상품 가격 변경처럼 기존 목록을 계속 이용하는 기능에서 특히 편했습니다.

데이터가 처음부터 많이 뒤섞여 있어도 삽입 정렬이 좋은가요?

항상 그렇지는 않습니다. 삽입 정렬은 이미 어느 정도 순서가 맞아 있는 데이터에서 장점이 크게 나타납니다. 처음부터 데이터가 많이 뒤섞여 있고 개수도 많다면 언어에서 제공하는 정렬 함수나 더 효율적인 알고리즘을 사용하는 편이 좋습니다.

실제 서비스에서도 버블 정렬, 삽입 정렬, 선택 정렬을 직접 구현하나요?

일반적인 서비스에서는 직접 구현하는 경우가 많지 않습니다. Kotlin, Java, Swift, JavaScript 같은 언어에서 제공하는 정렬 기능을 사용하거나 서버와 데이터베이스에서 원하는 순서로 데이터를 받아오는 경우가 많습니다. 다만 직접 구현해보면 데이터 상태에 따라 어떤 방식이 잘 맞는지 판단하는 데 도움이 됩니다.

세 가지 중 실제로 가장 많이 사용한 방법은 무엇이었나요?

제가 만든 게임 랭킹, 메시지 목록, 쇼핑몰 상품 목록에서는 삽입 정렬을 가장 많이 선택했습니다. 세 기능 모두 이미 나열된 데이터가 있고 새로운 값이 추가되거나 기존 값이 변경되는 일이 반복됐기 때문입니다.