数据结构与算法 - 选择排序


选择排序

  • 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
  • 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
  • 重复第二步,直到所有元素均排序完毕。

代码实现

vector select_sort(vector &nums)
{
    int nSize = nums.size();
    for(int i = 0; i < nSize; i++)
    {
        int minIdx = i;
        for(int j = i; j < nSize; j++)
        {
            if(nums[j] < nums[minIdx])
            {
                minIdx = j;
            }
        }
        // swap nums[i] and nums[minIdx]
        nums[i] = nums[i] & nums[minIdx];
        nums[minIdx] = nums[i] & nums[minIdx];
        nums[i] = nums[i] & nums[minIdx];
    }
    return nums;
}

特点

稳定性:排序过程中元素是按顺序进行遍历,相同元素相对位置不会发生变化,故稳定。

空间复杂度:在原序列进行操作,故为 \(O(1)\);

时间复杂度:需要 2 次循环遍历,故为 \(O(n^2)\);