选择排序
首先理解原理
现有数组:
int[] arr = new int[]{4,67,3,66,33,55,88,21,15,16,2,44,77,57,68};
这里演示从小到大排序,从大到小原理类似,大差不差。
原理:与冒泡一样,每一轮的比较能确定一个元素的最终位置。同时,选择排序的特点就是:
1.假设本轮是第i次排序,则索引0到i的元素已经是有序的。
2.minIndex记录每轮开始比较的元素位置,暂且认为起始元素就是本轮比较的最小元素,再往后遍历,当遇到元素比起始元素小的时候,这时minIndex指向该位置元素。
3.当每轮比较结束后,minIndex元素即为本轮找到的最小元素,此时,交换起始元素和minIndex元素即可。
下面欣赏一下大神的动图
代码演示:
public class MyTest {
public static void main(String[] args) {
int[] arr = new int[]{4,67,3,66,33,55,88,21,15,16,2,44,77,57,68};
selectSort(arr);
for (int i : arr) {
System.out.println(i);
}
}
public static int[] selectSort(int[] arr){
//minIndex记录每轮比较中的最小值索引
int minIndex = 0;
//temp作为临时变量,用于交换元素
int temp = 0;
for (int i = 0; i < arr.length-1 ; i++) {
minIndex = i ;
for (int j = i+1 ; j < arr.length ; j++){
if(arr[j] < arr[minIndex]){
minIndex = j;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
}