Java中的冒泡排序函数实现方法有哪些?
发布时间:2023-06-21 21:55:13
在Java中,冒泡排序是一种简单的排序算法,在排序方面起着重要的作用。冒泡排序函数的实现方法有多种,下面分别介绍以下四种常见的实现方式。
1. 基本的冒泡排序
基本的冒泡排序是在一个数组中,依次比较相邻的元素大小,如果前面的元素大于后面的元素,则交换它们的值。代码如下:
public void bubbleSort(int[] arr) {
int temp;
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;
}
}
}
}
2. 冒泡排序优化一
在基本的冒泡排序中,即使已经排好序,每一轮虽然都会从头到尾遍历整个数组。为了提高冒泡排序的效率,可以在每轮遍历中添加一个标志位,如果没有发生交换,说明已经排好序了,可以直接退出循环。代码如下:
public void bubbleSort(int[] arr) {
int temp;
boolean flag; // 标志位,记录是否交换
for (int i = 0; i < arr.length - 1; i++) {
flag = false; // 每轮开始,flag重置为false
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;
flag = true; // 如果有交换,flag置为true
}
}
if (!flag) break; // 如果没有交换,说明已排好序,退出循环
}
}
3. 冒泡排序优化二
在经过 轮遍历之后,最后一次交换的位置必然是最后一对逆序元素。因此,在进行下一轮遍历时,只需对“未排序列”中的元素进行排序即可,而“已排序列”中不用再进行排序了。代码如下:
public void bubbleSort(int[] arr) {
int temp;
boolean flag;
int k = arr.length - 1; // k记录最后一次交换的位置
for (int i = 0; i < arr.length - 1; i++) {
flag = false;
for (int j = 0; j < k; j++) { // 只需对“未排序列”中的元素进行排序
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true;
k = j; // 记录最后一次交换的位置
}
}
if (!flag) break;
}
}
4. 冒泡排序优化三
最后一种优化方法是鸡尾酒排序,也叫定向冒泡排序。它是对基本冒泡排序的改进,在正向遍历之后,再进行反向遍历,每次正反遍历都只需要对“未排序列”中的元素进行排序。代码如下:
public void cocktailSort(int[] arr) {
int temp;
boolean flag;
int left = 0, right = arr.length - 1;
while (left < right) {
flag = false;
for (int i = left; i < right; i++) {
if (arr[i] > arr[i + 1]) {
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
flag = true;
}
}
if (!flag) break;
right--;
flag = false;
for (int i = right; i > left; i--) {
if (arr[i] < arr[i - 1]) {
temp = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = temp;
flag = true;
}
}
if (!flag) break;
left++;
}
}
总之,以上是Java中常见的四种冒泡排序函数实现方法。在实际开发中,根据不同的需求选择不同的算法和优化方法,提高排序的效率。
