二元选择排序实例

二元选择排序

简单选择排序:每次循环只能确定一个元素排序后的定位。
二元选择排序:我们可以考虑改进为每次循环确定两个元素(当前最大次和最小记录)的位置,从而减少排序所需的循环次数。
private static void binarySelectSort(int[] arr){  
        int len = arr.length;  
        int i,j,min,max,tmp;  
        for(i=0; i<len/2; i++){  
            min = max = i;  
            for(j=i+1; j<=len-1-i; j++){  
                if(arr[j] > arr[max]){  
                    max = j;  
                    continue;  
                }  
                if(arr[j] < arr[min]){  
                    min = j;  
                }  
            }  
            if(min != i){//当第一个为min值,不用交换  
                tmp=arr[min];  
                arr[min]=arr[i];  
                arr[i]=tmp;  
            }  
            if(min == len-1-i && max == i)//当第一个为max值,同时最后一个为min值,不再需要下面操作  
                continue;  
            if(max == i)//当第一个为max值,则交换后min的位置为max值  
                max = min;  
            if(max != len-1-i){//当最后一个为max值,不用交换  
                tmp=arr[max];  
                arr[max]=arr[len-1-i];  
                arr[len-1-i]=tmp;  
            }  
        }  
    }  

猜你喜欢

转载自blog.csdn.net/wypersist/article/details/80650685
今日推荐