기본 소개
버블 정렬의 기본 개념은 정렬 순서를 앞뒤로 처리하고 (작은 첨자가있는 요소에서 시작)
인접한 요소의 값을 차례로 비교 하고 역순이 발견되면 교체하는 것입니다. 값이 큰 요소를 앞쪽에서 뒤쪽으로 서서히 이동하고 물속에 거품처럼 서서히 위로 올라갑니다
위의 밤은 그다지 좋지 않기 때문에 코드 분석 섹션에서 새로운 밤을 발견했습니다 (여기의 코드는 정렬 프로세스를 나타냅니다).
package data_structure;
import java.lang.reflect.Array;
import java.util.*;
public class BublleSortTest {
public static void main(String[] args) {
int arr[]={
3,9,-1,19,-2};
//第一趟排序就是将最大的数排在最后
int temp=0;//定义临时变量
for(int i=0;i<arr.length-1;i++) {
if(arr[i] > arr[i+1]) {
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第一次排序后的数组");
System.out.println(Arrays.toString(arr));
//第二趟排序就是将第二大的数排在倒数第二位
for(int i=0;i<arr.length-1-1;i++) {
if(arr[i] > arr[i+1]) {
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第二次次排序后的数组");
System.out.println(Arrays.toString(arr));
//第三趟排序就是将第三大的数排在倒数第三位
for(int i=0;i<arr.length-1-2;i++) {
if(arr[i] > arr[i+1]) {
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第三次排序后的数组");
System.out.println(Arrays.toString(arr));
//第四趟排序就是将第四大的数排在倒数第四位
for(int i=0;i<arr.length-1-3;i++) {
if(arr[i] > arr[i+1]) {
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第四次次排序后的数组");
System.out.println(Arrays.toString(arr));
}
}
간단한 분류를 위해 너무 많은 코드를 작성해야한다면, 가랑이를 똑바로 세우고 걸레로 노는 것과 같습니다. 다음으로 코드를 최적화합니다.
package data_structure;
import java.lang.reflect.Array;
import java.util.*;
public class BublleSortTest {
public static void main(String[] args) {
int arr[]={
3,9,-1,19,-2};
//第一趟排序就是将最大的数排在最后
int temp=0;//定义临时变量
for(int i=0;i<arr.length-1;i++) {
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j] > arr[j+1]) {
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
System.out.println("第"+i+"次排序后的数组");
System.out.println(Arrays.toString(arr));
}
}
}
분석 :
확장 :
{1,2,3,4,5}와 같은 정렬 된 배열이있는 경우 위의 방법으로 작성하면 시간이 크게 늘어납니다 (크기 순서가 작은 배열의 경우). 코드.
package data_structure;
import java.util.*;
public class bolle {
public static void main(String[] args) {
int arr[] = {
3, 9, 10, 19, 20 };
// System.out.println("排序前");
// System.out.println(Arrays.toString(arr));
//
bublleSort(arr);
//
// System.out.println("排序后");S
// System.out.println(Arrays.toString(arr));
}
public static void bublleSort(int[] arr) {
int temp = 0;// 定义临时变量
boolean flag = false;// 标识变量,表示是否进行过交换
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
flag = true;// 标识变量为真,那么就执行这段代码
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("第"+i+"次排序");
System.out.println(Arrays.toString(arr));
if (flag == false) {
// 在一趟排序中,一次都没交换过
break;
} else {
flag = false;// 重置flag,进行下一次轮询(判断,循环)
}
}
}
}
분석 :
예를 들어 위의 코드는 이미 정렬되어 있는데 포인터가 각 요소를 가리키고 정렬 된 것을 발견하면 바로 종료됩니다.