选择排序
V1.0
/**
* 选择排序(比较大小直接交换)
*/
public void select(int[] arr){
for(int i=0,len=arr.length;i<len-1;++i){
for(int j=i+1;j<len;++j){
if(arr[i] < arr[j])
continue;
//直接交换(交换次数多)
arr[i] = arr[i]^arr[j];
arr[j] = arr[i]^arr[j];
arr[i] = arr[i]^arr[j];
}
}
}
V2.0
/**
* 选择排序(找出最小值再交换)
* 思路: 首先找出数组中最小元素,与数组第一个元素交换,
* 然后找出剩余数组中最小元素与数组第二个元素交换,
* 如此往复,直到进行到数组最后一个元素
*/
public void selection(int[] arr){
for(int i=0,len=arr.length;i<len-1;++i){
int min = i;
for(int j=i+1;j<len;++j){
if(arr[min] > arr[j])
min = j; //只记录索引,不交换
}
if(min == i)
continue;
//找出最小值后再交换
arr[i] = arr[i]^arr[min];
arr[min] = arr[i]^arr[min];
arr[i] = arr[i]^arr[min];
}
}