冒泡排序:
思想:遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾。采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止。可设置一个flag来判断某趟排序是否发生过数据交换。若某一趟并没有发生数据交换,则说明数组已经有序。
java代码:
public static void bubbleSort(int[] arr) {
// 冒泡排序的时间复杂度 O(n^2)
int temp = 0; // 临时变量
boolean flag = false; // 标识变量,表示是否进行过交换
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]) {
flag = true;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
if (!flag) { // 在一趟排序中,没有发生交换
break;
} else {
flag = false; // 重置flag
}
}
}