冒泡排序算法
冒泡排序算法思路:(以从小到大为例)
从第一个元素开始,相邻的两个元素比较,若前者比后面的大,则两者交换顺序;
一次比较后,从第二个元素开始,相邻的仍遵循大者后移的规律完成一轮遍历;
一轮遍历后,可以保证最大的元素已至末尾;
在前面剩余的元素中重复上述过程。
1 实现前两个的比较
package sortAlgorithm;
public class BubbleSort {
public static void main(String[] args) {
// 初始定义
int[] arr = {5, 3, 6, 8, 1, 7, 9, 4, 2};
// 初始输出
System.out.print("初始输出:");
print(arr);
System.out.println("");
// 实现前两个的比较
int maxPos = 0;
int next = maxPos + 1;
if(arr[maxPos] > arr[next]) {
swap(arr, maxPos, next);
}
// 结尾输出
System.out.print("排序结果:");
print(arr);
}
// 交换方法
static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 打印方法
static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
2 完成一轮排序,保证最大值到末尾
package sortAlgorithm;
public class BubbleSort {
public static void main(String[] args) {
// 初始定义
int[] arr = {5, 3, 6, 8, 1, 7, 9, 4, 2};
// 初始输出
System.out.print("初始输出:");
print(arr);
System.out.println("");
for (int j = 0; j < arr.length - 1; j++) {
int maxPos = j;
int next = j + 1;
if(arr[maxPos] > arr[next]) {
swap(arr, maxPos, next);
}
}
// 结尾输出
System.out.print("排序结果:");
print(arr);
}
// 交换方法
static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 打印方法
static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
3 双重 for 循环,完成排序
package sortAlgorithm;
public class BubbleSort {
public static void main(String[] args) {
// 初始定义
int[] arr = {5, 3, 6, 8, 1, 7, 9, 4, 2};
// 初始输出
System.out.print("初始输出:");
print(arr);
System.out.println("");
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if(arr[i] > arr[j]) {
swap(arr, i, j);
}
}
}
// 结尾输出
System.out.print("排序结果:");
print(arr);
}
// 交换方法
static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 打印方法
static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
4 对数器验证
对数器可以参考上一篇文章《Java | 使用对数器判断自己的程序是否正确(generateRandomArray)》
5 冒泡完整代码
package sortAlgorithm;
public class BubbleSort {
public static void main(String[] args) {
// 初始定义
int[] arr = {5, 3, 6, 8, 1, 7, 9, 4, 2};
// 初始输出
System.out.print("初始输出:");
print(arr);
System.out.println("");
sort(arr);
// 结尾输出
System.out.print("排序结果:");
print(arr);
}
// 定义冒泡排序
static void sort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if(arr[i] > arr[j]) {
swap(arr, i, j);
}
}
}
}
// 交换方法
static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 打印方法
static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}