如下这样写三种算法的时间复杂度都为N平方 /** * 冒泡排序法 * 冒泡排序是拿相邻两个数做比较,如果是从大到小排序,就拿较小的一个去和下一个做比较,反之拿大的 *去和后面的比较 * @param arr */ public static void bubblingSort(Integer[] arr){ for (int i = 0; i < arr.length -1 ; i++) { for (int j = 0 ; j < arr.length - i -1; j++) { if (arr[j] > arr[j + 1]){ int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }
/** * 选择排序 * 选择排序是在剩余未排的部分中 选出最大或最小的数同最外层循环位置的数交换顺序。 * @param arr */ public static void selectSort(Integer[] arr){ for (int i = 0; i < arr.length - 1; i++) { int x = i; for (int j = i + 1; j < arr.length ; j++) { if (arr[x] > arr[j]){ x = j; } } if (x != i){ int temp = arr[x]; arr[x] = arr[i]; arr[i] = temp; } } }/** * 插入排序 * 在剩余未排序的数据中 挨个取出和前面已排序的比较并插入到适当的位置 * @param arr */ public static void insertSort(Integer[] arr){ for (int i = 1; i < arr.length; i++) { for (int j = i; j > 0 ; j --) { if (arr[j] > arr[j - 1]){ int temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; } } } } /** * 打印排序后的数组 * @param arr */ static void printArr(Integer[] arr){ for (Integer integer : arr) { System.out.print(integer +" "); } } /** * 生成一个长度为20 数据范围在0~499之间的的测试数组 * @return */ public static Integer[] makeTestArray(){ Integer[] arr = new Integer[20]; for (int i = 0; i < 20; i++) { Random r = new Random(); //产生一个0~499之间的随机数放入数组 arr[i] = r.nextInt(500); } return arr; }
/** * 测试方法 * @param args */ public static void main(String[] args) { Integer[] arr = makeTestArray(); bubblingSort(arr); printArr(arr); }