一、冒泡排序
1.冒泡排序的思想
让数组当中相邻的两个数进行比较,数组当中比较小的数值向下沉,数值比较大的向上浮!外层for循环控制循环次数,内层for循环控制相邻的两个元素进行比较。
2.编码
2.1 基础版本
private void sort1() {
int arr[] = {11, 99, 76, 89, 85, 23, 66, 34, 86};
for (int end = arr.length; end > 0; end--) {
for (int i = 1; i < arr.length; i++) {
if (arr[i - 1] > arr[i]) {
int temp = arr[i - 1];
arr[i - 1] = arr[i];
arr[i] = temp;
}
}
}
System.out.println("冒泡排序后的数组=" + Arrays.toString(arr));
}
打印的结果:冒泡排序后的数组=[11, 23, 34, 66, 76, 85, 86, 89, 99]
2.2 进阶版本
当一串数字已经是从左到右已经是排序好的数组,使用基础版本则不是最优的算法(时间复杂度)。当不需要进行相邻两个数位置互换,减少里层遍历的次数。
private static void sort2() {
int arr[] = {11, 23, 34, 66, 76, 85, 86, 89, 99};
for (int end = arr.length; end > 0; end--) {
boolean sorted = true;
for (int i = 1; i < arr.length; i++) {
if (arr[i - 1] > arr[i]) {
int temp = arr[i - 1];
arr[i - 1] = arr[i];
arr[i] = temp;
sorted = false;
}
}
if (sorted) {
break;
}
}
System.out.println("冒泡排序后的数组=" + Arrays.toString(arr));
}
打印的结果:冒泡排序后的数组=[11, 23, 34, 66, 76, 85, 86, 89, 99]
2.3 高级版本
需要排序的数组,很少情况会是从左到右已经排序好的,多数情况可能是某几个相邻数据已经排序好了。我们可以记录最后一次相邻两个数互换的位置,减少外层遍历的次数。
private static void sort3() {
int arr[] = {11, 76, 66, 34, 85, 23, 86, 89, 99};
for (int end = arr.length; end > 0; end--) {
int sortIndex = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i - 1] > arr[i]) {
int temp = arr[i - 1];
arr[i - 1] = arr[i];
arr[i] = temp;
sortIndex = i;
}
}
end = sortIndex;
}
System.out.println("冒泡排序后的数组=" + Arrays.toString(arr));
}
打印的结果:冒泡排序后的数组=[11, 23, 34, 66, 76, 85, 86, 89, 99]
以上提供了三种不同情况下的冒泡排序算法,喜欢的盆友可以点赞收藏!