冒泡排序
冒泡排序就是把一个数组中最大的数字往数组的末端排序:
算法思想:
1.比较相邻的两个元素,如果第一个元素比第二个元素大,就交换
2.对每一对相邻的元素都执行1操作,从开始第一对到最后一对(所以经过一轮之后,最大的数字会被安排到最末尾的位置放着)
3.第一轮排序之后,因为最后一个数字是最大的,不论如何位置都不会改变的,那么我们就不管最后一个,排除第一个位置之后,我们执行1,2操作
算法图解:
冒泡排序算法是稳定的排序算法:当arr[i]==arr[i+1]时,我们可以选择不移动,所以为稳定的
时间复杂度位O(n^2):双重循环遍历
空间复杂度O(1):只在原本的数组上排序交换
Java代码:
public void bubbleSort(int[] array) {
int n = array.length;
for (int i = 0; i < n - 1; i++) {
//在这里j不需要遍历到n-1了,因为n-1-i~n-1之间的元素已经排好序了,不需要再比较
for (int j = 0; j < n - 1 - i; j++) {
//将最大元素移动到数组末尾
if (array[j] > array[j + 1]) {
//交换
swap(array, j, j + 1);
}
}
}
}
void swap(int[] array, int i, int j) {
array[i] = array[i] + array[j];
array[j] = array[i] - array[j];
array[i] = array[i] - array[j];
}