java的选择排序学习

来源:互联网 发布:华为c语言笔试题 编辑:程序博客网 时间:2024/05/16 05:47
实现代码:
public class Selection {
     @SuppressWarnings("rawtypes")
    public static void main(String[] args) {
            Comparable[] a={49,38,65,97,76,13,27,49,78,34,12,64,1,8};
            System.out.println("排序之前:");
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i]+" ");
            }
//            //简单的选择排序
//            for (int i = 0; i < a.length; i++) {
//                int min = a[i];
//                int n=i; //最小数的索引
//                for(int j=i+1;j<a.length;j++){
//                    if(a[j]<min){  //找出最小的数
//                        min = a[j];
//                        n = j;
//                    }
//                }
//                a[n] = a[i];
//                a[i] = min;
//                
//            }
//            System.out.println();
//            System.out.println("排序之后:");
//            for (int i = 0; i < a.length; i++) {
//                System.out.print(a[i]+" ");
//            }
            
            int N = a.length;
            for (int i = 0; i < N; i++) {
                int min = i; //最小元素的索引
                for (int j = i + 1; j < N; j++) {
                    if (less(a[j], a[min])) 
                        min = j;
                }
                exch(a, i, min);
            }
            
            System.out.println();
            System.out.println("排序之后:");
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i]+" ");
            }
            
        }
     
     @SuppressWarnings({ "rawtypes", "unchecked" })
    private static boolean less(Comparable v, Comparable m){
         return v.compareTo(m) < 0;
     }
     
     @SuppressWarnings({ "unused", "rawtypes" })
    private static void exch(Comparable [] a, int i, int j){
         Comparable t = a[i];
         a[i] = a[j];
         a[j] = t;
     }
}  
排序之前:
49 38 65 97 76 13 27 49 78 34 12 64 1 8 
排序之后:
1 8 12 13 27 34 38 49 49 64 65 76 78 97   
算法分析:
对于长度为N的数组,选择排序需要大约N^2/2次比较和N次交换。
特点:
  1. 运行时间和输入没有关系。(对于一个有序的数组或主键全部相等的数组或元素随机排列的数组所用的排序时间一样长)。
  2. 数据移动是最少的。交换次数和数组的大小是线性关系。
  3. 简单选择排序是不稳定的排序。
  4. 时间复杂度:T(n)=O(n2)。
0 0