选择排序基本思想如下图:
- 首先要定义一个最小的索引值用来标记每一次比较后较小值的位置,例如minIndex;
- 第一步用第一个值和后面的值一次做比较,例如7要比6大,所以minIndex=1,
- 然后6比9小所以继续往后比较此时minIndex的值不变
- 6比5大,所以minIndex=3
- 5和11比不变
- 5比3大所以minIndex=5
- 3比1大所以minIndex=6
- 1比9小所以minIindex不变
- 7和1 交换位置
10.这是一步的过程
public void selectSort(int[] arr){
if(arr == null || arr.length == 0){
return;
}
//这一步是用来用每一个数和后面的数进行比较用的
for(int i = 0; i < arr.length - 1; i++){
int minIndex = i;//用来标记比较之后最小的值得索引
for(int j = i + 1; j < arr.length; j++){//第i个位置的值要和后面的比较所以+1,
minIndex = arr[j] < arr[minIndex] ? j : minIndex;//如果后面的数也就是j位置的数要比上次比较的第minIndex位置的数还小,那么就将j赋值给minIndex,使其成为更小的值,否则不变
}
//交换
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
因为有两层for循环,所以时间复杂度最终为O(n*n);
空间复杂度为O(1)