zoukankan      html  css  js  c++  java
  • 直接选择排序

    思想

      首先要明确的是,已排序序列在前,待排序序列在后,第一轮的待排序序列就是整个序列,每一轮在待排序序列中选出本轮最小的元素放在待排序序列,然后将这个首位纳入已排序序列,待排序序列元素数目相应减1;不断重复上述操作,直到已排序序列长度为数组长度

    代码实现

    void sortSelect(vector<int>& nums)
    {
        int n = nums.size();
        for (int i = 0; i <= n - 2; ++i)
        {
            int miniIndex = i;
            for (int j = i + 1; j <= n-1; ++j)//选出本轮最小元素的下标
            {
                if (nums[j] < nums[miniIndex])
                    miniIndex = j;
            }
            if (miniIndex != i)//如果最小元素不在首位,则把它换到首位;如果在首位,则不需要换
                swap(nums[i], nums[miniIndex]);
        }
    }

    时间复杂度

      最好情况O(n2),最坏情况O(n2),平均情况O(n2)

    空间复杂度

      O(1)

    稳定性

      选到了最小元素可能会有跳跃性的交换,即:把最小的元素换到首位也就有可能把一个相同元素换到后面去,如:序列5 8 5 2 9,我们知道第一轮第1个元素5会和2交换。所以是不稳定的

  • 相关阅读:
    微信小程序开发入门(六)
    JS计算日期加上指定天数得到新的日期
    Java中substring()
    List集合去除重复数据
    按钮倒计时
    jQuery中each方法
    Math三个函数
    jQuery表单提交
    jQuery 序列化表单数据
    正则取小数点后面几位
  • 原文地址:https://www.cnblogs.com/Joezzz/p/9647547.html
Copyright © 2011-2022 走看看