排序算法练习之选择排序

练习练习练习!!!

import java.util.Arrays;

/**
 * @Date: 2019-11-24 09:20
 * @King: No blood!No bone!No ash!!!
 */
public class TestSelectionSort {
  public static void main(String[] args) {
    /**
     * 定义数组
     */
    int [] arr = new int[7];
    arr[0] = 31;
    arr[1] = 13;
    arr[2] = 21;
    arr[3] = 33;
    arr[4] = 10;
    arr[5] = 25;
    arr[6] = 11;
    /**
     * 输出排序前
     */
    System.out.println("排序前:"+ Arrays.toString(arr));
    /**
     * 调用两种选择排序方法,并输出结果
     */
    selectionSortI(arr);
    System.out.println("无返回值类型排序后:"+Arrays.toString(arr));
    selectionSortII(arr);
    System.out.println("有返回值类型排序后:"+Arrays.toString(arr));
  }

  /**
   * 无返回值类型的选择查找
   */
  public static void selectionSortI (int [] array) {
    /**
     * 外层循环控制排序趟数
     */
    for (int i = 0;i < array.length - 1;i++) {
      for (int j = i;j < array.length - 1;j++) {
        /**
         * 假设每趟循环开始位置的元素最小,下标为minIndex = i
         */
        int minIndex = i;
        /**
         * 一趟循环结束发现比array[minIndex]小的元素,将其下标赋给minIndex
         * 一趟循环结束后将最小元素与开始元素交换位置
         */
        if (array[minIndex] > array[j + 1]) {
          minIndex = j + 1;
        }
        int temp = array[minIndex];
        array[minIndex] = array[i];
        array[i] = temp;
      }
    }
  }
  /**
   * 有返回值类型的选择查找
   */
  public static int [] selectionSortII (int [] array) {
    if (array.length == 0) {
      return array;
    }
    for (int i = 0;i < array.length - 1;i++) {
      int minIndex = i;
      for (int j = i;j < array.length - 1;j++) {
        if (array[minIndex] > array[j+1]) {
          minIndex = j + 1;
        }
        int temp = array[minIndex];
        array[minIndex] = array[i];
        array[i] = temp;
      }
    }
    return array;
  }
}

运行结果:

排序前:[31, 13, 21, 33, 10, 25, 11]
无返回值类型排序后:[10, 11, 13, 21, 25, 31, 33]
有返回值类型排序后:[10, 11, 13, 21, 25, 31, 33]

尽量让自己养成编程保证程序健壮性的习惯!

猜你喜欢

转载自www.cnblogs.com/sinoaccer/p/11921539.html