📅  最后修改于: 2023-12-03 14:58:52.627000             🧑  作者: Mango
鸡尾酒排序,也称为双向冒泡排序,是一种改进的冒泡排序算法。它通过往返移动(从左到右然后从右到左)来将最大的元素浮动到数组的末尾,同时将最小的元素浮动到数组的开头。这种排序算法对于大部分已经有序的数组可以有更好的性能。
以下是一个基于Java语言实现的鸡尾酒排序算法示例:
public class CocktailSort {
public static void cocktailSort(int[] arr) {
boolean swapped;
int start = 0;
int end = arr.length - 1;
do {
swapped = false;
// 从左到右逐个比较相邻元素,大的元素向右移动
for (int i = start; i < end; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = true;
}
}
// 如果没有元素交换,表示已经有序
if (!swapped) {
break;
}
swapped = false;
// 从右到左逐个比较相邻元素,小的元素向左移动
for (int i = end - 1; i >= start; i--) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = true;
}
}
start++;
end--;
} while (swapped);
}
public static void main(String[] args) {
int[] arr = {5, 8, 2, 12, 3};
cocktailSort(arr);
System.out.println("排序结果:");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
以上代码实现了鸡尾酒排序的核心算法。在cocktailSort
方法中,我们使用两个指针start
和end
来追踪已排序部分的起始和结束位置。通过循环多次从左到右和从右到左比较相邻元素并交换位置,直到没有元素需要交换为止。
在main
方法中,我们创建了一个整型数组arr
并调用cocktailSort
方法对其进行排序。最后输出排序结果。
希望上述介绍对你有帮助!