for (int i = 0; i < count; i++) // 요소의 개수만큼 반복
{
for (int j = 0; j < count - 1; j++) // 요소의 개수 - 1만큼 반복
{
if (arr[j] > arr[j + 1]) // 현재 요소의 값과 다음 요소의 값을 비교하여
{ // 큰 값을
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp; // 다음 요소로 보냄
}
}
}
거품 정렬 알고리즘의 규칙은 다음과 같습니다.
- 처음부터 끝까지 요소를 순회하면서 모든 요소를 비교
- 현재 값과 다음 값을 비교하여 큰 값을 다음으로 보냄(오름차순)
정렬이 되어있다면 n-1번만 체크한다는 게 이해가 안됨
예를 들어 count가 5 ( 요소가 5개 ) {1,2,5,4,3} 이렇게 있을 때
0번1번 요소는 정렬이 되어있으니까 뒤에꺼만 본다는 소린데
i
j
0 1 비교
1 2 비교
2 3 비교
3 4 비교
0 1 비교
1 2 비교
2 3 비교
3 4 비교
0 1 비교
1 2 비교
2 3 비교
3 4 비교
0 1 비교
1 2 비교
2 3 비교
3 4 비교
0 1 비교
1 2 비교
2 3 비교
3 4 비교
이렇게 되는거 아니야?
애초에 반복문이 돌아가고 if문으로 계속 비교하는데
정렬이 되어있다면 생략한다는 게 무슨 소린지 모르겠는데
저 코드에 뭔가를 추가해야되는건가?
코드가 이상한데
지금 코드는 정렬 끝난 부분도 계속 비교하고 있음
다른거 추가해야되는거지?
J쪽 for문에 i가 영향을 주게 바꿔보셈
그리고 본문에서 말한 한번 훝고 끝나는건 한번도 스왑 안되면 루프 탈출하도록 최적화 해야됨
코드는 그냥 인터넷에서 퍼왓어