Day2——選擇排序

選擇排序

參考本文對選擇排序的一些提示,在星球內記錄代碼及思考過程。

選擇排序是一種簡單直觀的排序算法,無論什麼數據進去都是 O(n²) 的時間複雜度。所以用到它的時候,數據規模越小越好。唯一的好處可能就是不佔用額外的內存空間了吧。

算法步驟

  1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

  2. 再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。

  3. 重複第二步,直到所有元素均排序完畢。

例子

在這裏插入圖片描述
這種排序的最大優勢就是省去了多餘的元素交換,冒泡排序是看見小的就交換,選擇排序是在剩下的數列中找最小的交換。

代碼

void selectSort(int array[])
{
    for(int i=0; i<array.length-1; i++)
    {
        int minIndex= i; 
        for(int j=i+1; j<array.length; j++)
        {
        	// 找出最小元素的位置
            minIndex = array[minIndex]<array[j] ? minIndex : j;
        }
        // 交換
        int tem = array[i];
        array[i] = array[minIndex];
        array[minIndex] = tem;
    }
}

選擇排序存在一個明顯問題,就是它的不穩定性。也就是說,當數列包含多個值相等的元素時,選擇排序有可能打亂它們的原有順序。

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