欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于选择排序的两种实现方法

程序员文章站 2022-03-24 13:45:29
...

方法一:
最外层的i代表排序后第i+1小的数(array[0]代表第1小,array[1]代表第2小…以此类推)
内层的j用来筛选未参与排列的数组区,一旦发现有比array[i]还小的数,就与其交换

public static void selectSort1(int[] array){
        for(int i = 0 ; i<array.length-1 ; ++i){
            for(int j = i+1 ; j<array.length ;j++){
                if(array[i] > array[j]){
                    int temp = array[j];
                    array[j] = array[i];
                    array[i] = temp;
                }
            }
        }
    }

========================================================
方法二:

 public static void selectSort2(int[] array){
        for(int i = 0 ; i<array.length-1;++i){
            findMin(array,i);
        }
    }

    //在数组下标区间[start,array.length)中找出最小值,并置换到start处
    public static void findMin(int[] array,int start){
    	//如果start非法
        if(start<0||start>=array.length-1)return;
        //开始
        int min = array[start];  //初始化最小值
        int minIndex = start;  //初始化最小值下标位置
        for(int i = start+1;i<array.length;++i){
            if(array[i]<min){//如果发现了更小的数
            	//修改最小值及其下标位置
                min = array[i];
                minIndex = i;
            }
        }
        //循环完毕后就可以得到最小数据的下标minIndex
        //交换start处与最小minIndex处的数据
        if(minIndex!=start){
            array[minIndex] = array[start];
            array[start] = min;
        }
    }