選擇排序

1 算法原理
依次確認第一個位置0~倒數第二個位置size-2的值。
在確認位置i時,其前面的位置都已經確認,因此位置i處應該放置剩餘的元素中的最小值。
選擇排序時間複雜度爲O(n^2),速度比較慢。當數組長度爲10萬時,就耗時20s了。
選擇排序是不穩定排序,相等的元素,排序以後, 相對位置可能發生變化
2 示例代碼
/**
* @brief - sort an array by select sort
* @param[in, out] array - pointer of the array [not null]
* @param[in] size - size of the array [>0]
* @retval 0 - succeed
* @retval -1 - fail
*/
int select_sort(int *array, int size)
{
    if ((NULL == array)
        || (size < 1))
    {
        return -1;
    }
    
    if (1 == size)
    {
        return 0;
    }
    
    int i = 0;
    int j = 0;
    int k = 0;
    int tmp = 0;
  
    // 依次確認第一個位置~倒數第二個位置
    for (i = 0; i < (size - 1); ++i)
    {
        k = i;

        // 尋找剩餘最小元素
        for (j = i + 1; j < size; ++j)
        {
            if (array[j] < array[k])
            {
                k = j;
            }
        }

        tmp = array[i];
        array[i] = array[k];
        array[k] = tmp;
    }
    
    return 0;
}
相關文章
相關標籤/搜索