線性數據結構算法

     數據結構計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法索引技術有關。

        圖形結構                                                       樹形結構                                           線性結構                                集合結構

 

1.冒泡排序

在進行冒泡法排序(升序)時,將第一個數與後繼的數進行比較,如果順序則繼續第二個數與後繼的數進行比較;如果逆序則交換位置,繼續和後繼的數進行比較,完成第一趟冒泡排序。同理,直到數組有序。

如果經過一趟冒泡排序不發生數據交換說明數組原本有序。

最好時間複雜度:O(n)

平均時間複雜度:O(n^2)

最壞時間複雜度: O(n^2)

空間複雜度: O(1)

代碼示例

  /**
     * 冒泡排序
     *
     * @param array
     * @return 相鄰數據對比,交互位置
     */
    public static int[] bubblingSort(int[] array) {
        //從後一位開始循環對比,直到循環完。
        for (int i = array.length - 1; i > 0; i--) {
            boolean flag = true;
            //把最大的篩選到最後
            for (int j = 0; j < array.length - 1; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flag = false;
                }
            }
            //優化減少循環的次數
            if (flag) {
                break;
            }
        }
        return array;
    }


     public static void main(String[] args) {
            int[] array = new int[]{3, 2, 5, 8, 1, 9, 4, 6, 7};
            bubblingSort(array);
            for (int i : array) {
                System.out.print(i + " ");
            }
        }

排序結果:

第1次排序:[2,3,5,1,8,4,6,7,9]
第2次排序:[2,3,1,5,4,6,7,8,9]
第3次排序:[2,1,3,4,5,6,7,8,9]
第4次排序:[1,2,3,4,5,6,7,8,9]
第5次排序:[1,2,3,4,5,6,7,8,9]
1 2 3 4 5 6 7 8 9 

 

2、 選擇排序:把第一個數與他後面的數進行比較,如果順序則繼續與後面比較,如果逆序則兩數交換位置,繼續將第一個數與交換位置後的數進行比較,這樣就完成了第一輪排序。同理將第二位與其後的數比較,直到數組有序爲止。

最好時間複雜度:O(n)

平均時間複雜度:O(n^2)

最壞時間複雜度: O(n^2)

空間複雜度:O(1)

代碼示例

 /***
     * 選擇排序
     * @param array
     * @return
     *
     */
    public static int[] selectSort(int[] array) {
        for (int i = 0; i <array.length-1 ; i++) {
            int index = i;
            for (int j = i+1; j < array.length ; j++) {
                if (array[j] < array[index]) {
                    index =j;//如果有一個小於固定位置的數,就對換位置。
                }
            }
            //如果已經是最小的,就不需要交換
            if(index!=i){
                int temp =array[index];
                array[index] =array[i];
                array[i] = temp;
            }
        }
        return array;
    }

     public static void main(String[] args) {
            int[] array = new int[]{3, 2, 5, 8, 1, 9, 4, 6, 7};
           selectSort(array);
            for (int i : array) {
                System.out.print(i + " ");
            }
        }

排序結果:

第0次排序:[1,2,5,8,3,9,4,6,7]
第1次排序:[1,2,5,8,3,9,4,6,7]
第2次排序:[1,2,3,8,5,9,4,6,7]
第3次排序:[1,2,3,4,5,9,8,6,7]
第4次排序:[1,2,3,4,5,9,8,6,7]
第5次排序:[1,2,3,4,5,6,8,9,7]
第6次排序:[1,2,3,4,5,6,7,9,8]
第7次排序:[1,2,3,4,5,6,7,8,9]
1 2 3 4 5 6 7 8 9 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章