public class Code_SelectSort {
public static void selectionSort(int []arr){
//arr是一个无序的数组 长度是1或者为空的数组 直接返回空
//没有排序的必要了
if (arr==null||arr.length<2){
return;
}
//0~N-1 找到最小值,在哪,放到0位置上
//1~n-1 找到最小值,在哪,放到1位置上
//2~n-1 找到最小值,在哪,放到2位置上
//n-1~n-1 最后整个数组有序
/*
选择排序原理:选择最小的放在前面;
i=0 -->比较N-1次
i=1 -->比较N-2次
*/
//选择排序
for (int i=0;i<arr.length-1;i++){
//i表示轮空 i -->0 - n-2
//i=0
int minIndex=i;//默认第一个数是最小值数的索引
for (int j=1;j<arr.length;j++){
/*
0 1 2 3 4
[5,2,4,1,3]
i = 0 j 从 1 -> 4
minIndex = 0;
j = 1时 arr[j] = 2 arr[minIndex] = arr[0] = 5 minIndex = j = 1
j = 2时 arr[j] = 4 arr[minIndex] = arr[1] = 2 minIndex = 1
j = 3时 arr[j] = 1 arr[minIndex] = arr[1] = 2 minIndex = j = 3
j = 4时 arr[j] = 3 arr[minIndex] = arr[3] = 1 minIndex = 3
0 1 2 3 4
[1,5,3,4,2]
i = 1 j 从2-->4
minIndex = i = 1;
j = 2 arr[j] = 3 arr[minIndex] = 5 minIndex = 2
j = 3 arr[j] = 4 arr[minIndex] = 3 minIndex = 2
j = 4 arr[j] = 2 arr[minIndex] = 3 minIndex = 4
swap(arr, i, minIndex)
*/
if (arr[j]<arr[i]){
minIndex=j;
}
swap(arr,i,minIndex);
}
}
}
public static void swap(int[]arr,int i,int minIndex){
// 先储存i位置上的值 临时变量
int tmp=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=tmp;
}
public static void printArrays(int[]arr){
for (int i=0;i<arr.length;i++){
}
}
public static void main(String[] args) {
int[] arr = {5,2,1,4,3};
}
}
|