1. 程式人生 > >排序演算法01-簡單排序

排序演算法01-簡單排序

簡單排序演算法共三種,分別是氣泡排序、選擇排序、插入排序,這三種排序演算法的演算法複雜度均為O(n^{^{2}}),這三種排序演算法雖然簡單,但卻是使用頻率比較高的;

1.氣泡排序的實現原理: 

 氣泡排序的原理就是按照順序相鄰的比較兩個元素,如果前者大於後者,則交換位置,如下圖:

 觀察可知,最大元素9已經被移動到最後的位置,同理可以完成排序。

 

2.選擇排序的實現原理:

選擇排序的原理就是每次選擇一個當前元素,然後向後查詢最小的元素,如果最小元素小於當前元素再將最小的元素與當前元素交換,如下圖:

 

3.插入排序的實現原理 :

插入排序的原理是每次選擇一個當前元素(以第二個元素開始),依次與前面的元素比較,如果小於前面的元素則繼續比較,直到找到比自己大的元素,然後插入到該元素的位置,比較過的元素都往後移一位,如下圖:

 

 

源程式如下: 

    // 氣泡排序
    public static int[] BubbleSort(int[] arr)
    {
        for (int i = 0; i < arr.length; i++)
            for (int j = 0; j < arr.length - i - 1; j++)
                if (arr[j] > arr[j + 1])
                {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
        return arr;
    }

    // 選擇排序
    public static int[] SelectSort(int[] arr)
    {
        for (int i = 0; i < arr.length - 1; i++)
        {
            int k = i;
            for (int j = i; j < arr.length; j++)
                if (arr[j] < arr[k])
                    k = j;
            int temp = arr[i];
            arr[i] = arr[k];
            arr[k] = temp;
        }
        return arr;
    }

    // 插入排序
    public static int[] InsertSort(int[] arr)
    {
        int temp;
        int j;
        for (int i = 1; i < arr.length; i++)
        {        
            temp = arr[i];
            j = i - 1;
            while (j >= 0 && temp < arr[j])
            {
                arr[j + 1] = arr[j];
                j--;
            }
            arr[j + 1] = temp;
        }
        return arr;
    }