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