排序算法的简单介绍

1 选择排序

1.1 选择排序的理解

    选择排序(Selection sort)是一种简单直观的排序算法。  


    它的工作原理是: 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,  
    然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序  
    的数据元素的个数为零。选择排序是不稳定的排序方法。  

1.2 选择排序的实现

 /**
 * @author ZhangRongJun
 * @version 1.0
 * @date 2020/9/14 18:41
 * @description:选择排序
 */
public class SelectionSort {
    public static void sort(Comparable[] a) {
        int N = a.length;
        //将a[]按升序排序
        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);
        }
    }
    private static boolean less(Comparable v,Comparable w){
        return v.compareTo(w) < 0;
    }
    private static void exch(Comparable[] a,int i,int j){
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
    private static void show(Comparable[] a){
        //在单行中打印数组
        for (int i = 0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
        System.out.println();
    }
    public static void main(String[] args) {
        Integer[] temp=new Integer[]{1,2,3,4,5,88,33,1,33,4,1,0,-1,-44};
        sort(temp);
        show(temp);

    }
}  

2 快速排序

2.1 快速排序的实现

这里实现的快速排序是采用三分法实现的,找取一个基准值,当小于基准值分一个区间,等于分一个区间,大于分一个区间

  
/**
 * @author ZhangRongJun
 * @version 1.0
 * @date 2020/9/15 19:58
 * @description:快速排序
 */
public class QuickSort {
    public static void sort2(Comparable[] a, int left, int right) {
        if (left >= right) {
            return;
        }
        int lt = left, i = left + 1, gt = right;
        //基准值
        Comparable v = a[left];
        while (i <= gt) {
            int tmp = a[i].compareTo(v);
            if (tmp < 0) {
                exch(a, lt++, i++);
            } else if (tmp > 0) {
                exch(a, i, gt--);
            } else {
                i++;
            }
        }
        sort2(a, left, lt - 1);
        sort2(a, gt + 1, right);
    }

    private static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }

    public static void main(String[] args) {
        Integer[] a = {4, 5, 6, 8, 1, 2, 4, 3, 9, 0, 1, 0, 5};
        sort2(a, 0, a.length - 1);
        for (Integer i : a) {
            System.out.print("  " + i);
        }
    }

}