选择排序算法改进随笔
/**这是一道选择排序改进的小测试,想法,在一次遍历中直接选取出最大值和最小值,然后分别移动到头尾,
* 主要难点在于边界的处理,因为使用了两次swap,第一次使用swap会造成index变化,第二次使用swap的时候就需要注意。
* 主要是两种情况:当最大值出现在头,或者最大值出现在头,最小值出现在尾时。
*/
public class AdvancedFastAlgorithm {
public static void main(String[] args) {
int[] arr={2,4,8,7,2,3,4,1,2,6,8,5,11,3,5,5};
// int[] arr={5,3,6,8,1,7,9,4,2};
for(int i=0;i<arr.length/2;i++)
{
int maxIndex=i;
int minIndex=i;
for(int j=i+1;j<arr.length-i;j++){
if(arr[j]<arr[minIndex]){
minIndex=j;
}
if(arr[maxIndex]<arr[j]){
maxIndex=j;
}
}
if(maxIndex==i){
maxIndex=minIndex;
}
if ( maxIndex==i && minIndex==arr.length-1-i){
swap(arr,maxIndex,minIndex);
}else{
swap(arr,minIndex,i);
swap(arr,maxIndex,arr.length-i-1);
}
}
for (int i : arr) {
System.out.print(" "+i);
}
}
public static void swap(int[]arr,int i,int j){
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}