01 

题目解析TOPIC ANALYSIS
接下来,我们以数组{1, 2, 5, 3, 4} 为例进行讲解。排序算法 #1 选择排序(文字版)_java
对于该数组来说,元素1和2处在已排序区间,而元素5、3、4则处在未排序区间。排序算法 #1 选择排序(文字版)_java_02
定义变量i指向未排序区间的第一个元素5;定义变量minIndex,其初始值为变量i的值;定义变量j,其初始值为i+1。
排序算法 #1 选择排序(文字版)_java_03
接着,将变量j所指向的元素和变量minIndex所指向的元素进行比较,如果变量j所指向的元素值小于变量minIndex所指向的元素值,则将变量j的值赋予变量minIndex。在这里,j所指向的元素为3,小于minIndex所指向的元素5,因此,将变量j的值赋予变量minIndex,即minIndex指向j所指向的元素。排序算法 #1 选择排序(文字版)_java_04
继续考察下一个元素,即将变量j加1。排序算法 #1 选择排序(文字版)_java_05
此时,变量j所指向的元素值大于变量minIndex所指向的元素值,且变量j指向数组的末尾。因此,变量minIndex所指向的元素3,就是未排序区间中最小的元素。接下来要做的就是将变量i所指向的元素5和变量minIndex所指向的元素3,进行位置交换。排序算法 #1 选择排序(文字版)_java_06

此时,元素3就处于已排序区间的末尾。排序算法 #1 选择排序(文字版)_java_07
对于未排序区间的元素5和4来说,重复上述过程即可完成排序。
02代码实现CODE

public void selectionSort(int[] arr) {    for(int i = 0; i < arr.length; i++) {        int minIndex = i;        for(int j = i + 1; j < arr.length; j++) {            if (arr[j] - arr[minIndex] < 0) {                minIndex = j;            }        }        swap(arr, i, minIndex);    }}
private void swap(int[] arr, int m, int n) {    int temp = arr[m];    arr[m] = arr[n];    arr[n] = temp;}