选择排序,插入排序算法

利用Java实现选择排序

import java.util.Random;

/**
 *算法思想:每次在数组中寻找最小的元素,使其与当前未经过排序的第一个元素进行交换,直至所有的元素都有序。
 *算法需要比较的次数:n(n-1)/2,交换的总次数为n
 *算法的效率分析:最坏时间复杂度 O(n^2) 平均时间复杂度O(n^2) 最好情况O(n^2)  空间复杂度O(1)
 *稳定性:否
 *算法特点:1.运行的时间和输入状态无关   2.数据移动次数是最少的
 * */
public class Selection {
    //排序算法
    public static void sort(Comparable[] a){
        for(int i=0;i<a.length;i++)
            for (int j=i+1;j<a.length;j++){
                int min=i;
                if(less(a[j],a[min]))
                    min=j;
                if(i!=min)
                    exch(a,i,min);
            }

    }
    //判断两个元素大小的方法
    private static boolean less(Comparable v,Comparable w){
        return v.compareTo(w)<0;
    }
    //交换方法
    private static void exch(Comparable[] a, int i, int j){
        Comparable temp=a[i];
        a[i]=a[j];
        a[j]=temp;
    }
    //显示方法
    public static  void show(Comparable []a){
        for(int i=0;i<a.length;i++)
            System.out.printf("%3d",a[i]);
        System.out.println();
    }
    //加入断言  判断是否使已经有序
    public boolean isSorted(Comparable []a){
        for(int i=1;i<a.length;i++)
            if(less(a[i],a[i-1]))
                return false;
        return true;
    }
}
//设置测试用例
class Test{
    public static void main(String[] args) {
        int N=10;
        Comparable[] a=new Comparable[N];
        Random random=new Random();
        for(int i=0;i<N;i++)
            a[i]=random.nextInt(100);
        for(int i=0;i<N;i++)
            System.out.printf("%3d",a[i]);
        System.out.println();
        Selection.sort(a);
        Selection.show(a);
    }
}

插入排序Java实现(与上面一致的方法在下面不一一列举)

/**
 * 算法思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中。
 * 时间效率:在排序的过程中,向有序字表中逐个的插入元素的操作进行了n-1趟
 * 算法的效率分析:最坏时间复杂度 O(n^2) 平均时间复杂度O(n^2) 最好情况O(n)  空间复杂度O(1)
 * 稳定性:是
 * 算法特点:运行的时间和输入状态有关(若需要比较的数组时完全逆序,那么则时最坏情况;若是已经排好顺序,
 *   则是最好情况)
 * */
public class Insertion {
    public static void sort(Comparable[] a){
        int N=a.length;
        for (int i=1;i<N;i++){
            for(int j=i;j>0&&less(a[j],a[j-1]);j--)//找到合适的插入位置
                exch(a,j,j-1);
        }
    }
}


猜你喜欢

转载自blog.csdn.net/sir_ti/article/details/79702733