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交换。所以是不稳定的

  • 相关阅读:
    哈希表存人名。。= =
    转载:风雨20年:我所积累的20条编程经验
    Beginning C# Objects:From Concepts to Code
    数据结构题集
    内部排序算法比较。。= =
    稀疏矩阵运算器
    断念
    .NET Reflector
    Andorid信息推送
    Project2010环境搭建
  • 原文地址:https://www.cnblogs.com/Joezzz/p/9647547.html
Copyright © 2011-2022 走看看