选择排序:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)
核心思想:扫描所有元素,得到最小元素,比将最小元素与左边第一个元素进行交换;再次扫描剩下所有元素,得到最小元素,与左边第二个元素进行交换,以此类推。
Java代码实现如下:
public void selectSort(int[] arr){
int min=0;
int temp;
for(int i=0;i<arr.length-1;i++){
min=i;
for(int j=i+1;j<arr.length;j++){ //从i+1开始,比较剩余n-1个元素
if(arr[j]<arr[min]){
min=j; //关键在于每次循环,找到最小元素所在的位置
}
}
temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
}
测试类:
System.out.println("选择排序前:");
tbs.displayArr(arr);
tbs.selectSort(arr);
System.out.println("选择排序后:");
tbs.displayArr(arr);
结果显示:
选择排序前:
78 99 35 42 1
选择排序后:
1 35 42 78 99
冒泡算法和选择排序的区别:
区别在于:冒泡算法,每次比较发现较小的元素在后面,就交换两个相邻元素,保证较大的排在后面,一次循环结束结果就是讲这一轮最大的置于最后。而选择排序算法的改进在于:先不急于调换位置,先将arr[0]记为最小值,从arr[1]开始逐个检查比较剩余n-1个元素,每次发现arr[i]小于min,则最小元素指向arr[i],直到这一次循环结束,找到最小元素的那个位置min,就把arr[0]和arr[min]调换位置,从而保证arr中最小的数据就被换到了最前面的位置,以此类推,直到从小到大排序完成。
所以,选择排序每扫描一遍数组,只需要一次真正的交换,而冒泡可能需要很多次。但两种算法比较的次数是一样的。