数据结构与算法之排序篇(不断更新扩充知识点)

184 阅读2分钟
public class SelectionSort {
    public static void main(String[] args) {

        int[] arr1 = {4,23,6,78,1,54,231,9,12};
        int n = arr1.length;

        Integer[] array = new Integer[n];
        for (int i=0;i<n;i++) {
            array[i] = arr1[i];
        }

       SectionSort(array, n);

        // Output => 1   4     6 9  12 23 54 78 231
        for(int i=0; i<n; i++)
        {
            System.out.print(array[i]+"\t");
        }


    }

    private static void SectionSort(Integer[] array, int n) {
        for(int i = 0; i<n; i++){
            int min = i;
            for(int j = i+1; j<n; j++){
                if(less(array[j],array[min])) min  = j;
            }
            exchange(array,i,min);
        }
    }

    private static void exchange(Integer[] array, int i, int min) {
        Integer t = array[i]; array[i] = array[min]; array[min] = t;
    }

    private static boolean less(Integer integer, Integer integer1) {
        return integer.compareTo(integer1)<0;
    }
}

选择排序:
1,运行时间和输入无关,因为,算法的时间效率和比较次数有关,一个有序的数组,和一个无需的数组排序所用时间一样长。其实你可以从代码中发现,对于任何一个数字都要和前边的数字进行比较。记录最小值,然后交换。

2,时间复杂度 0(n^2),空间复杂度0(1)


接下来是插入排序

public class InsertionSort {
    public static void main(String[] args){
        int[] arr1 = {4,23,6,78,1,54,231,9,12};
        sectionSort(arr1);
        for(int i=0; i<arr1.length; i++)
        {
            System.out.print(arr1[i]+"\t");
        }

}

    private static void sectionSort(int[] arr1) {
        int N = arr1.length;
        for(int i = 1; i<N; i++){
            //将a[i]插入到a[i-1],a[i-2],a[i-3] ...
            for(int j = i; j>0&&less(arr1[j],arr1[j-1]); j--)
                exchage(arr1,j,j-1);
        }
    }

    public static void exchage(int[] array, int i, int min) {
        int t = array[i]; array[i] = array[min]; array[min] = t;
    }

    public  static boolean less(Integer integer, Integer integer1) {
        return integer.compareTo(integer1)<0;
    }
}

希尔排序

public class shellSort {

    public static void main(String[] args) {

        int[] arr1 = {4,23,6,78,1,54,231,9,12};
        int n = arr1.length;
         ShellSort(arr1,n);
        for(int i=0; i<n; i++)
        {
            System.out.print(arr1[i]+"\t");
        }

}

    private static void ShellSort(int[] arr1,int n) {
        int h ;
        for(h=  n/2; h>0; h/=2);{
            for(int i = h; i<n;i++){
                for(int j = i-h; j>=0; j-=h){
                    if (arr1[j] > arr1[j + h]) {
                        int temp = arr1[j];
                        arr1[j] = arr1[j + h];
                        arr1[j + h] = temp;
                    }
                }
            }
        }
    }
}