Code

  1. import java.util.Arrays;
  2. /* 选择排序
  3. * 思路:因为从小到大,所以依次遍历,每次选择均把最小的数提取到最前面的位置。
  4. * 时间复杂度:遍历N个数,每次所有数都比较一边,与第一个进行交换。
  5. * 空间复杂度:不需要额外的空间
  6. */
  7. public class SelectionSort {
  8. // 对数器,生成一个不同长度,不同值的整型随机数据
  9. public static int[] randomArray(int maxLength, int range) {
  10. int length = (int) (Math.random() * (maxLength + 1));
  11. int[] arr1 = new int[length];
  12. for (int i = 0; i < length; i++) {
  13. arr1[i] = (int) (Math.random() * (range + 1)) - (int) (Math.random() * (range + 1));
  14. }
  15. return arr1;
  16. }
  17. //对数器ArrayList sort方法
  18. // public static ArrayList arrayListSort(int[] arr) {
  19. // ArrayList arr1 = new ArrayList();
  20. // for(int i = 0; i < arr.length; i++) {
  21. // arr1.add(arr[i]);
  22. // }
  23. // arr1.sort(null);
  24. // return arr1;
  25. // }
  26. public static void arraySort(int[] arr) {
  27. Arrays.sort(arr);
  28. }
  29. //遍历数组方法
  30. public static void arrayRead(int[] arr) {
  31. for (int i = 0; i < arr.length; i++) {
  32. System.out.print(arr[i] + " ");
  33. }
  34. }
  35. //比较对数器结果-
  36. public static boolean compareArray(int[] arr) {
  37. int[] arr1 = arr;
  38. int[] arr2 = arr;
  39. selectionSort(arr1);
  40. arrayRead(arr1);
  41. System.out.println();
  42. arraySort(arr2);
  43. arrayRead(arr2);
  44. System.out.println();
  45. for (int i = 0; i < arr.length; i++) {
  46. if (arr[i] != arr2[i]) {
  47. return false;
  48. }
  49. }
  50. return true;
  51. }
  52. // 参数:最大长度,值范围
  53. public static void selectionSort(int[] arr) {
  54. int length = arr.length;
  55. for (int i = 0; i < length; i++) {
  56. for (int j = i; j < length; j++) {
  57. int least = arr[i];
  58. if (arr[j] < least) {
  59. int temp = arr[i];
  60. arr[i] = arr[j];
  61. arr[j] = temp;
  62. }
  63. }
  64. }
  65. }
  66. public static void main(String[] args) {
  67. // 对数器参数设置
  68. int Times = 1000;
  69. int maxLength = 10;
  70. int range = 20;
  71. // 生成随机数组
  72. // int[] arr = new int[]{3, 5, 1, 0, 7, 2, 9};
  73. for (int i = 0; i < Times; i++) {
  74. int[] arr = randomArray(maxLength, range);
  75. // arrayRead(arr);
  76. // System.out.println();
  77. boolean result = compareArray(arr);
  78. System.out.println(result ? "成功啦!" : "失败啦");
  79. }
  80. }
  81. }

运行结果

image.png

总结

  • 随机Math.random() [0,1) 生成数组范围,长度方法
    • 长度:(int)(Math.random() * (maxlength + 1)
      • 如length为5,int( 6 * [0,1) ) = [0,5]
    • 范围:(int)(Math.random() (range + 1) - (int)(Math.random() (range)
      • 如range为5,[0,5] - [0,5] = [-5,5]
  • Array.sort(int[] arr)方法,import java.util.Arrays
  • 三目运算符
    • System.out.println(result ? “成功啦!” : “失败啦”);
  • 交换方法,传入对象进行修改引用对象内容
    • public static void swap(int[] arr, int i, int j) {
      int tmp = arr[i];
      arr[i] = arr[j];
      arr[j] = tmp;
      }