數據結構之選擇排序(四)

排序思路:在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此循環。

直接實現:

   public void selectSort(int datas[]) {
        for (int i = 0; i < datas.length - 1; i++) {//有N個元素只需比較N-1for (int j = i + 1; j < datas.length; j++) {
                if (datas[j] < datas[i]) {
                    datas[j] = datas[j] ^ datas[i];
                    datas[i] = datas[j] ^ datas[i];
                    datas[j] = datas[j] ^ datas[i];
                }
            }
        }

        for (int i = 0; i < datas.length; i++) {
            System.err.printf("data[%d]是:%d %n", i, datas[i]);
        }
    }

算法分析:
1.在選擇排序中,無論元素的初始序列如何,都要進行 (n-1)+(n-2)+(n-3)+….+1 = n*(n-1)/2 = O(n2)次比較,所以時間複雜度爲O(n2) n爲元素個數。
2.當元素的初始序列爲正序時,移動次數爲0,而當元素的初始序列爲反序時,總的移動次數爲:3*總趟數,即Mmax = 3*(n-1) 。
3.在直接選擇排序中只使用了i,j,min這3個輔助元素,與問題規模無關,所以空間複雜度爲O(1)。
4.當元素序列類似[8,5,8,1]時,在第一趟比較中第一個元素8和最後個元素1進行了交換,元素中的兩個8的相對位置發生了改變,所以直接選擇排序是一種不穩定排序。

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