데이터 구조 와 알고리즘 분석의 거품 정렬 알고리즘 과 효율 분석
1. 거품 정렬 이란 무엇 인가
거품 정렬 알고리즘 은 정렬 대기 배열 을 여러 번 옮 겨 다 녀 야 하 며, 매번 옮 겨 다 닐 때마다 인접 한 요 소 를 비교 해 야 합 니 다.만약 한 쌍 의 원소 가 내림차 순 이 라면 서로 그들의 위 치 를 교환한다.그렇지 않 으 면 변 하지 않 는 다.작은 값 이 '기포' 처럼 점점 위로 떠 오 르 고 큰 값 이 바닥 으로 가 라 앉 기 때문에 이런 기술 을 거품 정렬 이나 침하 정렬 이 라 고 부른다.
2. 거품 정렬 알고리즘
for (int i = 1; i < list.length; i++) {
for (int j = 0; j < list.length-i; j++) {
if (list[j]>list[j+1]) {
int temp = list[j];
list[j] = list[j+1];
list[j+1] = temp;
}
}
3. 거품 정렬 과정 분석
정렬 전 배열 은 int [] list = {1, 3, 5, 4, 9, 6, 7, 2};
정렬 과정:
1
1 3 5 4 9 6 7 2
1 3 5 4 9 6 7 2
1 3 4 5 9 6 7 2
1 3 4 5 9 6 7 2
1 3 4 5 6 9 7 2
1 3 4 5 6 7 9 2
1 3 4 5 6 7 2 9
1
13456729
2
1 3 4 5 6 7 2 9
1 3 4 5 6 7 2 9
1 3 4 5 6 7 2 9
1 3 4 5 6 7 2 9
1 3 4 5 6 7 2 9
1 3 4 5 6 2 7 9
2
13456279
3
1 3 4 5 6 2 7 9
1 3 4 5 6 2 7 9
1 3 4 5 6 2 7 9
1 3 4 5 6 2 7 9
1 3 4 5 2 6 7 9
3
13452679
4
1 3 4 5 2 6 7 9
1 3 4 5 2 6 7 9
1 3 4 5 2 6 7 9
1 3 4 2 5 6 7 9
4
13425679
5
1 3 4 2 5 6 7 9
1 3 4 2 5 6 7 9
1 3 2 4 5 6 7 9
5
13245679
6
1 3 2 4 5 6 7 9
1 2 3 4 5 6 7 9
6
12345679
7
1 2 3 4 5 6 7 9
7
12345679
:
1 2 3 4 5 6 7 9
4. 정렬 효율 분석
n 개의 요소 가 설치 되 어 있 습 니 다. 첫 번 째 는 n - 1 번 을 비교 해 야 하고 두 번 째 는 n - 2 번 이 필요 합 니 다. 마지막 으로 한 번 만 비교 해 야 합 니 다.그래서 효율 은 (n - 1) + (n - 2)... + 1 = (n - 1) n / 2 = O (n 제곱) 이다.
5. 알고리즘 부족 및 개선
거품 정렬 알고리즘 을 실 현 했 지만 흠 이 있 습 니 다.
예 를 들 어 한 조 의 배열 은 처음에 이미 순 서 를 정 했다. 하나, 둘, 셋, 넷, 다섯.두 번 째 는 옮 겨 다 니 며 끝 날 때 까지 옮 겨 다 닌 다.이렇게 하면 시간 을 낭비 할 것 이다.
이제 최 적 화 된 거품 정렬 알고리즘 을 소개 합 니 다.
boolean needNextPass = true;//
for (int i = 1; i < list.length && needNextPass; i++) {
needNextPass = false;
for (int j = 0; j < list.length-i; j++) {
if (list[j]>list[j+1])
{
int temp = list[j];
list[j] = list[j+1];
list[j+1] = temp;
needNextPass = true;
}
}
변동 이 그리 크 지 는 않 지만 가뜩 이나 순서 가 정 해 져 있 는 상황 에 부 딪 히 면 옮 겨 다 니 는 횟수 를 줄 여 효율 을 높 인 다.예 를 들 어 {1, 2, 3, 4, 5} 을 정렬 할 때 최 적 화 된 알고리즘 은 한 번 만 옮 겨 다 니 면 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.