zcq

    1. package com.atguigu.sort;
    2. import java.text.SimpleDateFormat;
    3. import java.util.Arrays;
    4. import java.util.Date;
    5. //选择排序
    6. public class SelectSort {
    7. public static void main(String[] args) {
    8. //int [] arr = {101, 34, 119, 1, -1, 90, 123};
    9. //创建要给80000个的随机的数组
    10. int[] arr = new int[80000];
    11. for (int i = 0; i < 80000; i++) {
    12. arr[i] = (int) (Math.random() * 8000000); // 生成一个[0, 8000000) 数
    13. }
    14. System.out.println("排序前");
    15. //System.out.println(Arrays.toString(arr));
    16. Date data1 = new Date();
    17. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    18. String date1Str = simpleDateFormat.format(data1);
    19. System.out.println("排序前的时间是=" + date1Str);
    20. selectSort(arr);
    21. Date data2 = new Date();
    22. String date2Str = simpleDateFormat.format(data2);
    23. System.out.println("排序前的时间是=" + date2Str);
    24. //System.out.println("排序后");
    25. //System.out.println(Arrays.toString(arr));
    26. }
    27. //选择排序
    28. public static void selectSort(int[] arr) {
    29. //在推导的过程,我们发现了规律,因此,可以使用for来解决
    30. //选择排序时间复杂度是 O(n^2)
    31. for (int i = 0; i < arr.length - 1; i++) {
    32. int minIndex = i;
    33. int min = arr[i];
    34. for (int j = i + 1; j < arr.length; j++) {
    35. if (min > arr[j]) { // 说明假定的最小值,并不是最小
    36. min = arr[j]; // 重置min
    37. minIndex = j; // 重置minIndex
    38. }
    39. }
    40. // 将最小值,放在arr[0], 即交换
    41. if (minIndex != i) {
    42. arr[minIndex] = arr[i];
    43. arr[i] = min;
    44. }
    45. //System.out.println("第"+(i+1)+"轮后~~");
    46. //System.out.println(Arrays.toString(arr));// 1, 34, 119, 101
    47. }
    48. /*
    49. //使用逐步推导的方式来,讲解选择排序
    50. //第1轮
    51. //原始的数组 : 101, 34, 119, 1
    52. //第一轮排序 : 1, 34, 119, 101
    53. //算法 先简单--》 做复杂, 就是可以把一个复杂的算法,拆分成简单的问题-》逐步解决
    54. //第1轮
    55. int minIndex = 0;
    56. int min = arr[0];
    57. for(int j = 0 + 1; j < arr.length; j++) {
    58. if (min > arr[j]) { //说明假定的最小值,并不是最小
    59. min = arr[j]; //重置min
    60. minIndex = j; //重置minIndex
    61. }
    62. }
    63. //将最小值,放在arr[0], 即交换
    64. if(minIndex != 0) {
    65. arr[minIndex] = arr[0];
    66. arr[0] = min;
    67. }
    68. System.out.println("第1轮后~~");
    69. System.out.println(Arrays.toString(arr));// 1, 34, 119, 101
    70. //第2轮
    71. minIndex = 1;
    72. min = arr[1];
    73. for (int j = 1 + 1; j < arr.length; j++) {
    74. if (min > arr[j]) { // 说明假定的最小值,并不是最小
    75. min = arr[j]; // 重置min
    76. minIndex = j; // 重置minIndex
    77. }
    78. }
    79. // 将最小值,放在arr[0], 即交换
    80. if(minIndex != 1) {
    81. arr[minIndex] = arr[1];
    82. arr[1] = min;
    83. }
    84. System.out.println("第2轮后~~");
    85. System.out.println(Arrays.toString(arr));// 1, 34, 119, 101
    86. //第3轮
    87. minIndex = 2;
    88. min = arr[2];
    89. for (int j = 2 + 1; j < arr.length; j++) {
    90. if (min > arr[j]) { // 说明假定的最小值,并不是最小
    91. min = arr[j]; // 重置min
    92. minIndex = j; // 重置minIndex
    93. }
    94. }
    95. // 将最小值,放在arr[0], 即交换
    96. if (minIndex != 2) {
    97. arr[minIndex] = arr[2];
    98. arr[2] = min;
    99. }
    100. System.out.println("第3轮后~~");
    101. System.out.println(Arrays.toString(arr));// 1, 34, 101, 119 */
    102. }
    103. }