蛮力法在排序算法中的应用
对于一个排序问题,我们能想到的最简单的排序方法就是选择和冒泡
1、选择排序:时间复杂度O(n^2)
public class Main {public static void main(String[] args) {int[] a = {89, 45, 68, 90, 29, 34, 17};int min;for (int i = 0; i < a.length-1; i++) {min = i;for (int j = i+1; j < a.length; j++) {if (a[j] < a[min]) {min = j;}}int temp = a[i];a[i] = a[min];a[min] = temp;}for (int i = 0; i < a.length; i++) {System.out.print(a[i] + " ");}}
}
选择排序的思路就是如此,虽也有优化思路,例如每次迭代出最大值和最小值,放在开头和结尾。但是选择排序必然要编译算真整个数组,所以最好的优化结果也是O(n^2)。
2、冒泡排序:时间复杂度O(n^2)
public class Main {public static void main(String[] args) {int[] a = {89, 45, 68, 90, 29, 34, 17};int min;for (int i = 0; i < a.length-1; i++) {for (int j = 0; j < a.length-1-i; j++) {if (a[j+1] < a[j]) {int temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}for (int i = 0; i < a.length; i++) {System.out.print(a[i] + " ");}}
}
发现问题:对于冒泡排序我们都知道,即使已经排好顺序,循环还是会继续进行,即使只比较不交换。
优化思路:当判断到数组已经不再发生改变之后就终止循环。
当然,这就是蛮力法的一个应用,通过蛮力的解法来找到优化的思路