저작권 고지
- 이 기사 원저자 : Columbia Valley의 남동생
- 작성자 블로그 주소 : http://blog.csdn.net/lfdfhl
원리 분석
정렬되지 않은 배열 {1,9,7,5,3}이 있습니다. 거품 정렬을 사용하여 배열을 작은 것에서 큰 것 (큰 것에서 작은 것)으로 정렬하십시오.
첫 번째 여행 : 총 5 개의 숫자, 4 번 비교, 프로세스는 다음과 같습니다 :
1과 9, 9가 더 크고 위치가 변경되지 않았으므로 여전히 1,9,7,5,3
9 및 7, 9가 더 크며 변경해야합니다. 위치, 9 및 7 스왑 1,7,9,5,3
9 및 5 비율, 9는 더 크고, 위치 변경 필요, 9 및 5는 1,7,5,9,3
9 및 3 비율, 9는 더 크며 변경해야 함 위치, 9 및 3 스왑 1,7,5,3,9
두 번째 라운드 : 1,7,5,3,9 3 회 비교, 프로세스는 다음과 같습니다 :
1과 7, 7이 더 크고 위치를 변경할 필요가 없으므로 여전히 1,7,5,3,9
7 및 5 비율, 7은 크고, 위치를 바꿔야하므로 1,5,7,3,9가됩니다.
7은 3보다 크고, 7은 큰, 위치를 변경해야하므로 1,5,3,7,9가됩니다.
세 번째 라운드 : 1,5,3,7,9 2 회 비교, 프로세스는 다음과 같습니다 :
1과 5 비율, 5가 더 크며 위치를 변경할 필요가 없으므로 여전히 1,5,3,7,9
5 및 3 비율, 5 큰, 위치 변경 필요, 1,3,5,7,9
네 번째 라운드 :
1, 3, 5, 7, 9 비교 1 회, 프로세스는 다음과 같습니다 : 1은 3과 비교, 3은 더 크며 위치를 변경할 필요가 없으므로 여전히 1,3,5,7,9
요약:
- 1. 배열의 5 개 숫자, 5-1 = 4 배 비교
- 2. 각 여행을 몇 번 비교 했습니까? 패스 수 +이 패스에서 비교 된 횟수 = 배열의 요소 수
- 3. 매번 비교하고 최대 값을 비교 한 다음 끝에 넣습니다.
- 4. 각 비교에서 두 숫자는 쌍으로 비교되며 위치를 반대로해야 할 수 있습니다.
암호
버블 정렬 코드는 다음과 같이 구현됩니다.
package com.algorithm;
/**
* 本文作者:谷哥的小弟
* 博客地址:http://blog.csdn.net/lfdfhl
*/
public class BubbleSort {
public static void main(String[] args) {
int[] intArray = {
11, 99, 77, 5, 0, -1};
printArray(intArray);
System.out.println();
bubble(intArray);
}
public static void bubble(int[] intArray) {
for (int i = 0; i < intArray.length - 1; i++) {
for (int j = 0; j < intArray.length - 1 - i; j++) {
if (intArray[j] > intArray[j + 1]) {
swap(intArray, j, j + 1);
}
}
}
printArray(intArray);
}
//打印数组
public static void printArray(int[] intArray) {
for (int i = 0; i < intArray.length; i++) {
System.out.print(intArray[i] + " ");
}
}
//交换数组中的元素
public static void swap(int[] intArray, int i, int j) {
int temp = 0;
temp = intArray[i];
intArray[i] = intArray[j];
intArray[j] = temp;
}
}