8大排序算法的java实现

关于八大排序算法,大家肯定都不陌生,相关的概念可以从博主另一边转载的文章中去看看。

http://blog.csdn.net/clx44551/article/details/51240796

这里主要给出8大排序算法的java实现。

1. 冒泡排序

平均复杂度O(n^2),最好情况O(n),最差情况O(n^2)。稳定

class Main{
    public static void main(String[] args){
        int[] n=new int[]{113,448,66,2,165,84,13,2,64,153};
        Sort(n);
        System.out.println(Arrays.toString(n));
    }
    public static int[] Sort(int[] arr){
        int length=arr.length;
        for(int i=0;iarr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        return arr;
    }
}

2. 快速排序

平均复杂度O(nlog2n),最好情况O(nlog2n),最差情况O(n^2)。不稳定

class Main {
    public static void main(String[] args) {
        int[] num = new int[] { 21, 5, 13, 2, 45, 6, 3, 7 };
        quickSort(num, 0, num.length - 1);
        System.out.println(Arrays.toString(num));
    }
    public static void quickSort(int[] list, int low, int high) { 
        if (low < high) {  
            int middle = getMid(list, low, high);  //将list数组进行一分为二  
            quickSort(list, low, middle - 1);        //对低字表进行递归排序  
            quickSort(list, middle + 1, high);       //对高字表进行递归排序  
        }  
    }
    public static int getMid(int[] arr,int low,int hight){
        int i=low;
        int j=hight;
        int k=arr[low];
        while(ik)j--;
            if(i

3. 插入排序

简介:插排在数组大部分排序正确的情况下,效率高。依次取数组的前n项进行排序。

平均复杂度O(n^2),最好情况O(n),最差情况O(n^2)。稳定

class Main{
    public static void main(String[] args){
        int[] n=new int[]{113,448,66};
        insertSort(n);
        System.out.println(Arrays.toString(n));
    }
    public static int[] insertSort(int[] arr){
        if(arr==null||arr.length<2) return arr;
        for(int i=0;i0;j--){
                if(arr[j]

4. 希尔排序

简介:插排在数组大部分排序正确的情况下,效率高。因此有了希尔排序,将一个数组分成d份,分别进行插排。数组长度为length,d一般取值为[length/2,length/4,…….1],最后为1。

平均复杂度O(n^1.3),最好情况O(n),最差情况O(n^2)。不稳定

class Main{
    public static void main(String[] args){
        int[] n=new int[]{113,448,66,2,165,84,13,2,64,153};
        xierSort(n);
        System.out.println(Arrays.toString(n));
    }

    public static int[] xierSort(int[] arr){
        int d=arr.length;       
        while(true){    
            d=d/2;
            for(int j=0;j=0;k=k-d){    //for中为一组里面插排的过程
                        if(arr[k+d]

5. 选择排序

简介:
第一趟,从数组中找出最小的数与第一个交换;
第二趟,从第二个数开始找到数组中最小的数与第二个交换;
以此类推…..

平均复杂度O(n^2),最好情况O(n^2),最差情况O(n^2)。不稳定

class Main{
    public static void main(String[] args){
        int[] n=new int[]{113,448,66,2,165,84,13,2,64,153};
        Sort(n);
        System.out.println(Arrays.toString(n));
    }
    public static int[] Sort(int[] arr){
        int length=arr.length;
        for(int i=0;iarr[j]){
                    int temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        return arr;
    }
}

- 后面将持续更新别的排序算法….

你可能感兴趣的:(数据结构)