基本算法-选择排序

简介: 基本算法-选择排序

前言

      本文介绍一种经典排序算法——选择排序,是入门级的排序算法之一。以下是本篇文章正文内容,包括算法简介、算法特点、算法实现和C++示例。

一、选择排序简介

      选择排序法也是枚举法的一种应用,就是反复从未排序的数列中选最大或最小的元素,加入另一个数列中,最后的结果就是已排序好的数列。原理就是不停扫描,每扫描一次,将最大值或者最小值放在首位。例如,n个数据选最小的放在第一个位置,再将剩下的n-1个数据选最小的放在第二个位置,以此类推执行n-1次扫描,就完成排序了。和冒泡排序异曲同工,因此都是入门的简单排序算法。

二、算法特点

      1)无论是最坏、最好还是平均情况,都要执行n-1次扫描,所以时间复杂度为O(n2)。


      2)由于冒泡为相邻两个数据相互比较而后决定是否互换位置,并不会改变原来排序的顺序,因此属于稳定排序法。


      3)只需要一个额外空间,空间复杂度很低。


      4)此排序法适用于数据量小或有部分数据已经排序过的情况。

三、代码实现

// 选择排序
vector<int> SelectSort(vector<int> data)
{
  // 拷贝
  vector<int> result = data;
  // 排序过程:必定扫描n-1次,n为数据个数
  int size = static_cast<int>(data.size());
  for (int t = 0; t < size - 1; ++t)
  {
    for (int i = t + 1; i < size; ++i)
    {
      if (result[t] > result[i])
      {
        int temp = result[t];
        result[t] = result[i];
        result[i] = temp;
      }
    }
  }
  return result;
}

四、C++示例

#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
using namespace std;
// 展示当前顺序
void Show(vector<int> data)
{
  size_t size = data.size();
  for (size_t i = 0; i < size; ++i)
    cout << setw(4) << data[i];
  cout << endl;
}
// 选择排序
vector<int> SelectSort(vector<int> data)
{
  // 拷贝
  vector<int> result = data;
  cout << "选择排序:\n原始数据:\n";
  Show(result);
  // 排序过程:必定扫描n-1次,n为数据个数
  int size = static_cast<int>(data.size());
  for (int t = 0; t < size - 1; ++t)
  {
    for (int i = t + 1; i < size; ++i)
    {
      if (result[t] > result[i])
      {
        int temp = result[t];
        result[t] = result[i];
        result[i] = temp;
      }
    }
    cout << "第" << t + 1 << "次排序结果:\n";
    Show(result);
  }
  cout << "排序后结果:\n";
  Show(result);
  return result;
}
// 主函数
int main()
{
  vector<int> data = { 9,11,567,0,-2,4,2 };
  // 选择排序
  vector<int> result2 = SelectSort(data);
  system("pause");
  return 0;
}

      效果图:

      综上可看出,选择排序每次将最小的值放在前方,也是比较基础的排序算法。优点是好理解,缺点emm不稳、速度超慢emmm

      如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

相关文章
|
搜索推荐
选择排序与其它排序算法比较
选择排序与冒泡排序同属O(n²)排序算法,但选择排序不稳定。相比堆排序,虽每轮均选最大元素,但选择排序基于线性结构,效率较低,而堆排序利用大顶堆结构提升了选择效率。
221 0
|
搜索推荐 Java Go
深入了解选择排序算法
深入了解选择排序算法
288 4
|
搜索推荐
冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析
冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析
513 1
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
699 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)
|
搜索推荐 算法
【排序算法(一)】——插入排序,选择排序 —> 深层解析
【排序算法(一)】——插入排序,选择排序 —> 深层解析
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
309 0
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
算法 搜索推荐
数据结构与算法-选择排序
数据结构与算法-选择排序
217 4
排序算法---选择排序-----详解&&代码
排序算法---选择排序-----详解&&代码

热门文章

最新文章