先找出最大或最小的,然后找出剩余最大或最小的 依次排放即可

    1. public static void main(String[] args) {
    2. int[] arr = {1, 3, 5, 7, 8, 3, 4, 6, 0};
    3. System.out.println("first "+Arrays.toString(chooseSortFirst(arr)));
    4. System.out.println("second "+Arrays.toString(chooseSortSecond(arr)));
    5. }
    6. /**
    7. * 思路:
    8. * 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
    9. * 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
    10. *
    11. * @param arr 待排序数组
    12. * @return arr 从小到大有序数组
    13. */
    14. public static int[] chooseSortFirst(int[] arr) {
    15. if (arr != null && arr.length > 0) {
    16. /**
    17. * -1 reason
    18. * i = arr.length -1
    19. * - j = arr.length
    20. * 循环终止
    21. *
    22. * i = arr.length -2
    23. * - j = arr.length -1 arr[arr.length -2] compareTo arr[arr.length -1]
    24. *
    25. */
    26. for (int i = 0; i < arr.length - 1; i++) {
    27. int minIndex = i;
    28. for (int j = i + 1; j < arr.length; j++) {
    29. minIndex = arr[minIndex] < arr[j] ? minIndex : j;
    30. }
    31. if (minIndex != i) {
    32. int temp = arr[i];
    33. arr[i] = arr[minIndex];
    34. arr[minIndex] = temp;
    35. }
    36. }
    37. }
    38. return arr == null ? new int[]{} : arr;
    39. }
    40. public static int[] chooseSortSecond(int[] arr) {
    41. if (arr != null && arr.length > 0) {
    42. for (int i = 0; i < arr.length - 1; i++) {
    43. for (int j = i + 1; j < arr.length; j++) {
    44. if (arr[i] > arr[j]) {
    45. int temp = arr[i];
    46. arr[i] = arr[j];
    47. arr[j] = temp;
    48. }
    49. }
    50. }
    51. }
    52. return arr == null ? new int[]{} : arr;
    53. }
    54. // 输出结果
    55. first [0, 1, 3, 3, 4, 5, 6, 7, 8]
    56. second [0, 1, 3, 3, 4, 5, 6, 7, 8]