原理:冒泡排序的原理很简单,比较+交换,关键是这个比较是如何比较的,好了不废话,比较就是相邻的两个元素进行比较,然后交换。冒泡排序是性能最差的一种排序算法,在任何一门语言中都不会用这种性能垃圾的算法来进行排序的,所以在实际工作中你根本见不到这个算法的应用,那么问题来了,既然冒泡排序如此垃圾,为何在面试中频频遇到这种垃圾的算法题呢?原因很简单,考察的是你的编码能力,一般关于冒泡排序的算法题都会告诉你冒泡排序的原理,然后让你写出代码来。
算法复杂度:o(n^2)
下面是JAVA代码:如此简单(性能垃圾)
public void sort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
boolean hasSwap = false;
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j+1]) {
SortTestHelper.swap(arr, j , j+1);
hasSwap = true;
}
}
if (!hasSwap) {
break;
}
}
}
下面是GO代码:
func bubbleSort(arr []int) {
length := len(arr)
for i := 0; i < length-1; i++ {
hasSwap := false
for j := 0; j < length-i-1; j++ {
if (arr[j] > arr[j+1]) {
temp := arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
hasSwap = true
}
}
if (!hasSwap) {
return
}
}
}
辅助函数:
public class SortTestHelper {
public static void swap(int[] arr, int idx, int idx1) {
int tmp = arr[idx];
arr[idx] = arr[idx1];
arr[idx1] = tmp;
}
}