冒泡排序的实现
package algorithm;
public class BubbleSort {
public static void main(String[] args) {
int[] arr1 = { 5, 8, 6, 3, 1, 9, 7, 4, 2 };
// 不知道是什么排序
sort(arr1);
echoArr(arr1);
int[] arr2 = { 5, 8, 6, 3, 1, 9, 7, 4, 2 };
// 冒泡排序
bubbleSort(arr2);
echoArr(arr2);
}
// 不知道是什么排序
public static void sort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if(arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
// 冒泡排序
// 时间复杂度 n ^ 2
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
// 本次循环中是否进行过交换
boolean flag = false;
for (int j = 0; j < arr.length - 1 - i; j++) {
if(arr[j] > arr[j + 1]) {
/*
* 第一种交换值的方式
*
* int temp = arr[j];
* arr[j] = arr[j + 1];
* arr[j + 1] = temp;
*/
/*
* 第二种交换值的方式
*
* 不适用第三方变量,采用亦或进行变量值替换
*
* arr[j] = arr[j] ^ arr[j + 1];
* arr[j + 1] = arr[j] ^ arr[j + 1];
* arr[j] = arr[j] ^ arr[j + 1];
*/
/*
* 第三种交换值的方式
*
* 原理:
* a = 2;
* b = 3;
*
* a = a + b = 5;
* b = a - b = 2;
* a = a - b = 3;
* 交换完成
* 与亦或逻辑原理相同
*/
arr[j] = arr[j] + arr[j + 1];
arr[j + 1] = arr[j] - arr[j + 1];
arr[j] = arr[j] - arr[j + 1];
flag = true;
}
}
if(!flag) {
// 没进行过交换 说明数组排序已经完成
// 程序可直接退出
break;
}
}
}
// 输出数组内容的方法
public static void echoArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println();
}
}
附执行结果如下:
123456789
123456789