冒泡排序
代码实现(从小到大排序)
public class BubbleSort {//从小到大排序
public static void bubbleSort(int[] array) {
if (array == null || array.length <= 1) {
return;
}
int temp = 0;
int len = array.length;
// len 个元素,要冒泡 len - 1 次
for (int i = 1; i < len; i++) {
for (int j = 0; j < len - i; j++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
}
设置标志位:优化外循环,设置一个标志位,表示当前第 i 趟是否有交换,如果有,则要进行 i+1 趟,如果没有,则说明当前数组已经完成排序
public class BubbleSort {//从小到大排序
public static void bubbleSort(int[] array) {
if (array == null || array.length <= 1) {
return;
}
int temp = 0;
int len = array.length;
int isSorted = false;
// len 个元素,要冒泡 len - 1 次
for (int i = 1; i < len; i++) {
isSorted = false;
for (int j = 0; j < len - i; j++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
isSorted = true;
}
}
if (!isSorted) {
break;
}
}
}
}
鸡尾酒排序:优化内循环,适合用在大多数元素已经是有序的前提下,可以减少每一次遍历的比较次数
public class BubbleSort {//从小到大排序
public static void bubbleSort(int[] array) {
if (array == null || array.length <= 1) {
return;
}
int temp = 0;
int rightBorder = array.length - 1;//数组右边界
int leftBorder = 0;//数组左边界
int end = 0;
boolean isSorted = false;
for (int i = 0; i < array.length / 2; i++) {//向左或向右遍历的次数最多为array.length/2次
isSorted = false;
for (int j = leftBorder; j < rightBorder; j++) {//从左往右遍历比较
if (array[j] > array[j + 1]) {//从小到大排序
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
end = j;//记录向右遍历时最后一次交换时的索引
isSorted = true;
}
}
rightBorder = end;//向右遍历时最后一次交换时的索引作为新的右边界
if (!isSorted) {//isSorted == false,说明内层for循环中,没有交换任何元素,直接跳出外层循环
break;
}
for (int j = rightBorder; j > leftBorder; j--) {//从右往左遍历比较
if (array[j] < array[j - 1]) {//从小到大排序
temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
end = j;//记录向左遍历时最后一次交换时的索引
isSorted = true;
}
}
leftBorder = end;//向左遍历时最后一次交换时的索引作为新的左边界
if (!isSorted) {//isSorted == false,说明内层for循环中,没有交换任何元素,直接跳出外层循环
break;
}
if (leftBorder >= rightBorder) {//左边界大于等于右边界时,排序结束
break;
}
}
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战