美文网首页
排序算法---选择排序

排序算法---选择排序

作者: 艰默 | 来源:发表于2023-04-18 09:36 被阅读0次

排序是我们学习算法过程中重要且基础的一环,例如对下面的排序问题,我们应该怎么做呢?

排序问题

选择排序思想和实现思路

提到排序问题,很容易想到的思路就是找出来所有数据中最大(或最小)的元素,放在一个新列表的第一位,然后再在剩下的元素中找出最大(或最小)的元素,放在新列表的第二位,以此类推.....。这就是选择排序(selection sort)的算法思想。

快速排序思想

上图就是选择排序算法思想,但一个算法的实现往往不能通过一个简单的思想就搞定(这就是思想与现实的距离,哈哈~)。选择算法的实现并不会新建一个空白列表(因为这样太奢侈了),而是直接在原列表上进行操作:首先从列表中找出最大(或者最小)的元素,将其与列表中的第一个元素互换位置,然后再从剩余元素中挑选出最大(或者最小)的元素,将其与列表中的第二个元素交换位置。以此类推,直到剩余元素的个数为零。具体的实施步骤如下:

选择排序算法实现

算法实现

接下来我们看一下其具体的算法实现:

#include <iostream>
#include <vector>
using namespace std;

struct Student {
    string name;
    int score;

    bool operator<(const Student& other) {
        // 判断分数是否相同,不同就按照分数比较;如果相同,按名字比较大小
        return score != other.score ? score < other.score : name < other.name;
    }

    friend ostream& operator<<(ostream& os, Student& s) {
        os << s.name << " " << s.score << endl;
        return os;
    }
};

// 选择排序
template <typename T>
void selectionSort(vector<T>& vec) {
    int size = vec.size();
    for (int i = 0; i < size; i++) {
        int maxValueIndex = i;
        for (int j = i + 1; j < size; ++j) {
            // 这里用来决定算法是升序还是降序
            if (vec[maxValueIndex] < vec[j]) maxValueIndex = j;
        }
        swap(vec[i], vec[maxValueIndex]);
    }
}

int main() {
    vector<Student> students;
    students.emplace_back(Student{"张三", 68});
    students.emplace_back(Student{"李四", 79});
    students.emplace_back(Student{"李飞", 98});
    students.emplace_back(Student{"刘麻", 59});

    cout << "\n---排序前---\n";
    for (auto student : students) {
        cout.width(8);  // 设置数据宽度
        cout << student;
    }

    // 选择排序
    selectionSort(students);

    cout << "\n---排序后---\n";
    for (auto student : students) {
        cout.width(8);  // 设置数据宽度
        cout << student;
    }
    return 0;
}

程序运行结果:

---排序前---
  张三 68
  李四 79
  李飞 98
  刘麻 59

---排序后---
  李飞 98
  李四 79
  张三 68
  刘麻 59

相关文章

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 算法4:插入排序和选择排序算法的比较

    排序算法列表电梯: 选择排序算法:详见 《算法4》2.1 - 选择排序算法(Selection Sort), Py...

  • 图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序

    图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序 图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序

  • PHP常用算法

    基于选择的排序算法 常见的基于选择的排序算法有:冒泡排序、插入排序、选择排序、归并排序和快速排序,我们在选在排序算...

  • 算法and数据结构

    算法 冒泡排序 选择排序 计数排序

  • 基础排序算法总结

    排序算法分为内部排序和外部排序,而我们经常说的基础排序算法,都是内部排序算法。包括冒泡排序,选择排序,插入排序,快...

  • LeetCode大全

    1.常见排序算法: 常见的排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、...

  • 《算法4》2.1 - 插入排序算法(Insertion Sort

    排序算法列表电梯: **选择排序算法:详见 Selection Sort ** 插入排序算法(Insertion ...

  • 排序算法

    排序算法 排序是最基本的算法之一,常见的排序算法有插入排序、希尔排序、选择排序、冒泡排序、堆排序、归并排序及快速排...

  • 面试算法知识梳理(12) - 二叉树算法第二部分

    面试算法代码知识梳理系列 面试算法知识梳理(1) - 排序算法 插入排序 希尔排序 选择排序 冒泡排序 计数排序 ...

网友评论

      本文标题:排序算法---选择排序

      本文链接:https://www.haomeiwen.com/subject/vmehjdtx.html