1.冒泡排序:
思路:将相邻的逆序元素交换为顺序排列,直到整个序列有序,算法如下:
/**
* 冒泡排序-最初实现,时间复杂度O(n^2)
* @param arr 待排序的数组
* @param lo 待排序区间的起始位置
* @param hi 待排序区间的结束位置
*/
public static void bubbleSort(int[] arr, int lo, int hi) {
//对序列进行规模n-1次扫描
for (int i = lo; i < hi - 1; i++) {
//每次扫描都会将当前区间最大的元素移到末尾,所以每次扫描的范围都可以减少1
for (int j = lo; j < hi - i - 1; j++) {
//判断相邻元素是否为逆序,是的话交换
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
}
以上算法在任何情况都会对一个规模为n的序列进行n-1次扫描,即使该序列在中途已经变成有序。所以需要一个标示位来记录每次扫描后该序列是否已经完成排序,改进算法如下:
/**
* 冒泡排序-改进一:记录扫描结果
* @param arr 待排序的数组
* @param lo 待排序区间的起始位置
* &#