初级排序算法

参考博客:https://www.cnblogs.com/guoyaohua/p/8600214.html

1.冒泡排序

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 

最佳情况:T(n) = O(n)   最差情况:T(n) = O(n2)   平均情况:T(n) = O(n2)

https://images2017.cnblogs.com/blog/849589/201710/849589-20171015223238449-2146169197.gif

2.选择排序

表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。

https://images2017.cnblogs.com/blog/849589/201710/849589-20171015224719590-1433219824.gif

最佳情况:T(n) = O(n2)  最差情况:T(n) = O(n2)  平均情况:T(n) = O(n2)

3.插入排序

  插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

https://images2017.cnblogs.com/blog/849589/201710/849589-20171015225645277-1151100000.gif

最佳情况:T(n) = O(n)   最坏情况:T(n) = O(n2)   平均情况:T(n) = O(n2)

 代码实现

public class maopao {
    // 冒泡排序
    private static int[] bubbleSort(int[] array) {
        if(array.length == 0)
            return array;
        int tmp = 0;
        for(int i=0;i<array.length;i++) {
            for(int j=0;j<array.length-i-1;j++) {
                if(array[j]>array[j+1]) {
                    tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                }
            }
        }
        return array;
    }
    
    // 选择排序
    private static int[] SelectionSort(int[] array) {
        if(array.length == 0)
            return array;
        for(int i=0;i<array.length;i++) {
            int minIndex = i;
            for (int j = i; j < array.length; j++) {
                if(array[j]<array[minIndex]) 
                    minIndex = j;
            }
            int tmp = array[minIndex];
            array[minIndex] = array[i];
            array[i] = tmp;        
        }
        return array;
    }
    
    // 插入排序
    private static int[] insertionSort(int[] array) {
        if(array.length == 0)
            return array;
        int current;
        for(int i=0;i<array.length-1;i++) {
            current = array[i+1];
            int preIndex = i;
            while(preIndex>=0 && current<array[preIndex]) {
                array[preIndex+1] = array[preIndex];
                preIndex--;
            }
            array[preIndex+1] = current;
        }
        return array;
    }
    
    // 归并排序法
    
    // 快速排序法
    
    // 堆排序法
    
    public static void main(String[] args) {
        int[] array = {21,23,5,67,8};
        for(int i=0;i<array.length;i++) {
            System.out.print(array[i]+" ");
        }
        System.out.println();
        array = insertionSort(array);
        for(int i=0;i<array.length;i++) {
            System.out.print(array[i]+" ");
        }
    }
}

相关推荐