1.题目
2.解法
冒泡排序的算法思想是这样的:
比较相邻的两个元素,如果第一个比第二个大(或小),就交换它们的位置;
对每一对相邻的元素重复这个操作,直到遍历完整个数组,这样最大(或最小)的元素就被移动到了数组的末尾;
除了最后一个元素,对剩余的元素重复上述步骤,直到数组完全有序。
冒泡排序的名字来源于它的过程,就像水里的气泡一样,越小(或越大)的元素会逐渐上浮到数组的顶部。
public class BubbleSort { public static void main(String[] args) { int[] nums = new int[]{1, 8, 5, 2, 7, 0}; sortArray(nums); System.out.println(); } public static void sortArray(int[] nums) { int length = nums.length; for (int i = 0; i < length; i++) { for (int j = 0; j < length - 1 - i; j++) { if (nums[j] > nums[j + 1]) { int temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } } }
冒泡排序的时间复杂度是指执行冒泡排序算法所需要的时间,它取决于比较和交换的次数。
最好的情况是,数组已经有序,只需要进行一趟冒泡,比较 n-1 次,不需要交换,所以时间复杂度是 O (n);
最坏的情况是,数组完全逆序,需要进行 n-1 趟冒泡,每趟比较 n-i 次,并且每次都要交换,所以时间复杂度是 O (n^2);
平均的情况是,每趟冒泡大约需要比较和交换 n/2 次,总共需要进行 n-1 趟冒泡,所以时间复杂度是 O (n^2);
综上,冒泡排序的时间复杂度是 O (n^2)