十大经典算法-选择排序(java版本)

1.实现逻辑

  • <1>.初始状态:无序区为R[1..n],有序区为空;
  • <2>.第i趟排序(i=1,2,3...n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序 从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;
  • <3>.n-1趟结束,数组有序化了。

2.代码实现

public class SelectSort {
    public static void main(String[] args) {
            int a[] = {6,3,1,2};
            int b[] = selectsort(a);
            for (int k=0;k< b.length;k++){
                System.out.println(b[k]);
            }
    }
    //基本的选择排序
    public static int [] selectsort(int a[]){
        //初始最大值位置
        int maxpos = 0;
        for(int i=0;i<a.length-1;i++){
            maxpos = 0;
            for(int j=0;j<a.length-i-1;j++){
                if(a[j]>a[maxpos]){
                    maxpos = j;
                }
            }
            if(maxpos != a.length-i-1){
                //交换两个数大小
//                int tmp = a[a.length-i-1];
//                a[a.length-i-1] = a[maxpos];
//                a[maxpos] = tmp;
                change(a,maxpos,a.length-i-1);

            }
        }
        return a;
    }
    //交换两个数大小
    //值传递 引用传递
    public  static  void change(int [] arr,int indexI,int indexJ){
        int temp = arr[indexI];
        arr[indexI] = arr[indexJ];
        arr[indexJ] = temp;
    }
}

3.时间复杂度

  • 最佳情况:T(n) = O(n2)
  • 最差情况:T(n) = O(n2)
  • 平均情况:T(n) = O(n2)

 

 

posted @ 2021-11-26 22:39  changfan  阅读(37)  评论(0编辑  收藏  举报