初学者刚刚接触算法的时候,可以通过编写一些辅助的工具来辅助算法的学习。
一、排序算法辅助工具类
1. 随机生成一个整形数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public static int[] generateRandomArray(int size,int rangeL,int rangeR) { int[] arr = new int[size]; for(int i = 0;i < size;i++) { arr[i] = (int) (Math.random() * (rangeR-rangeL+1)) + rangeL; } return arr; }
|
2. 生成一个近乎有序的整形数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
public static int[] generateAlmostOrderlyArray(int size,int swapTimes) { int[] arr = new int[size]; for(int i = 0;i<size;i++) { arr[i] = i; } for(int i = 0;i < swapTimes;i++) { int index1 = (int) Math.random()*size; int index2 = (int) Math.random()*size; swap(arr,index1,index2); } return arr; }
|
3. 判断一个数组是否正反皆有序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
public static boolean isOrderly(int[] arr) { if(isOrderAsc(arr) || isOrderDesc(arr)) { return true; } return false; }
private static boolean isOrderAsc(int[] arr) { for(int i=0;i < arr.length-1;i++) { if(arr[i] > arr[i+1]) { return false; } } return true; }
private static boolean isOrderDesc(int[] arr) { for(int i = arr.length-1; i > 0; i--) { if(arr[i] > arr[i-1]) { return false; } } return true; }
|
4. 拷贝一个整形数组
1 2 3 4 5 6 7 8 9 10 11 12
|
public static int[] copyIntArray(int[] arr) { int[] copyArr = new int[arr.length]; for(int i = 0;i < arr.length; i++) { copyArr[i] = arr[i]; } return copyArr; }
|
5. 交换数组中的两个索引的位置
1 2 3 4 5 6 7 8 9 10 11
|
public static void swap(int[] arr, int i, int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }
|
6. 打印数组
1 2 3 4 5 6 7 8 9 10
|
public static void printArray(int[] arr) { for (int i : arr) { System.out.print(i+"\t"); } System.out.println(); }
|
二、三种基本排序算法
1. 冒泡排序
1 2 3 4 5 6 7 8 9 10 11 12 13
|
public static void bubbleSort(int[] arr) { for(int i = 0;i < arr.length-1;i++) { for(int j = 0;j < arr.length-1;j++) { if(arr[j+1] < arr[j]) { SortTestUtils.swap(arr, j+1, j); } } } }
|
2. 选择排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
public static void selectSort(int[] arr) { for(int i = 0;i < arr.length-1;i++) { int min = i; for(int j = i+1;j < arr.length;j++) { if(arr[j] < arr[min]) { min = j; } } SortTestUtils.swap(arr, i, min); } }
|
3. 插入排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
public static void insertSort(int[] arr) { for(int i = 1; i < arr.length; i++) { int insertValue = arr[i]; int j = 0; for(j = i;j > 0 && arr[j-1] > insertValue; j--) { arr[j] = arr[j-1]; } arr[j] = insertValue; } }
|