Time complexity
Bubble sort
public static void bubbleSort(int[] arr){ if(arr == null || arr.length < 2) return; for(int end = arr.length-1; end > 0; end--){ for(int i = 0; i < end; i++) if(arr[i] > arr[i+1]) swap(arr,i,i+1); } }
Selection sort
public static void selectionSort(int[] arr){ if(arr == null || arr.length < 2) return; for(int i = 0; i < arr.length-1; i++){ int minIndex = i; for(int j = i+1; j < arr.length; j++) minIndex = arr[j] < arr[minIndex] ? j : minIndex; swap(arr, i, minIndex); } }
Insertion sort
public static void insertionSort(int[] arr){ if(arr == null || arr.length < 2) return; for(int i = 1; i < arr.length; i++) for(int j = i - 1;j >= 0 && arr[j] > arr[j + 1]; j--)//One by one swap(arr, j, j + 1); }
Logarithmic device
- Random generators: generating random arrays
- Prepare an absolutely correct method: do not need to consider the time complexity, and make sure it is absolutely correct.
- The method of comparison
- Compare method a and method b many times to verify whether method a is correct
- If there is an error in the comparison of samples, which method of printing sample analysis is wrong
- When the number of samples is large, the comparison test is still correct, and it can be determined that method a is correct.
Bubble sorting as an example
-
Random generator
public static int[] generateRandomArray(int size, int value){ int[] arr = new int[(int) ((size + 1) * Math.random())]; for (int i = 0; i < arr.length; i++) arr[i] = (int)((value + 1) * Math.random()) - (int)(value * Math.random());//Just random numbers. return arr; }
-
Prepare an absolutely right approach
public static void rightMathod(int[] arr){ Arrays.sort(arr); }
-
The method of comparison
//Judge the equality of two arrays public static boolean isEqual(int[] arr1, int[] arr2){ if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) return false; if (arr1 == null && arr2 ==null) return true; if (arr1.length != arr2.length) return false; for (int i = 0; i < arr1.length; i++) { if(arr1[i] != arr2[i]) return false; } return true; }
//Main public static void main(String[] args) { //Set oneself int testTime = 500000; int size = 10; int value = 100; boolean succeed = true; for (int i = 0; i < testTime; i++){ int[] arr1 = generateRandomArray(size,value);//generator int[] arr2 = copyArray(arr1);//Copy arr1 int[] arr3 = copyArray(arr1); bubbleSort(arr1); rightMathod(arr2); if(!isEqual(arr1,arr2)){ succeed = false; printArrays(arr3);//Print out the wrong sample break; } } System.out.println(succeed ? "Nice!" : "Error!"); } //Replicated array public static int[] copyArray(int[] arr){ if (arr == null) return null; int[] res = new int[arr.length]; for (int i = 0; i< arr.length; i++) res[i] = arr[i]; return res; } //Print samples public static int[] printArrays(int[] arr){ ... }