回顾

排序算法的稳定性

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

简单选择排序的思路

  1. 设待排序的记录存放在数组r[1….n]中。第一趟从r[1]开始,进行n-1次比较,从n个记录中选出关键字最小的记录,记为r[k],交换r[1]与r[k]。
  2. 第二趟从r[2]开始,进行n-2次比较,从n-1个记录中选出关键字最小的记录,记为r[k],交换r[2]与r[k]。
  3. 以此类推,第i趟从r[i]开始,通过n-i次比较,从n-i+1个记录中选出关键字最小的记录,记为r[k],交换r[i]和r[k]。
  4. 经过n-1趟,交换完成。

简单选择排序稳定性讨论

当输入序列为30 30* 2 1 时,第一趟遍历会将30放到最后,第二趟遍历会将30放到到数第二个位置,最后所得的序列变为1 2 30 30(30*表示的意思在原序列中,其前方已经存在了一个30),由此我认为简单选择排序是不稳定的,相同关键字的记录在经过排序之后相对次序发生改变。

代码测试

#include <iostream>using namespace std;
struct Test
{int data; // 数据int idx; // 原始位置
};
int main(void)
{struct Test arr[100];int n;cin >> n;for (int i = 0; i < n; ++i){ // 输入数据cin >> arr[i].data;arr[i].idx = i;}for (int i = 0; i < n - 1; ++i){int mmin = arr[i].data;int idx = i;for (int j = i + 1; j < n; ++j){if (mmin > arr[j].data) {mmin = arr[j].data;idx = j;}}if (idx != i) {struct Test tmp = arr[i];arr[i] = arr[idx];arr[idx] = tmp;}}cout << "排序后数据\t\t当前位置\t\t原始位置" << endl;for (int i = 0; i < n; ++i){cout << arr[i].data << "\t\t\t" << i + 1 << "\t\t\t" << arr[i].idx+1 << endl;}return 0;
}

运行结果

简单选择排序的稳定性相关推荐

  1. 排序算法 | 简单选择排序,算法的图解、实现、复杂度和稳定性分析

    今天讲解一下简单选择排序的原理以及实现.复杂度和稳定性分析 这个内容很简单,轻松加愉快,很快就过了~ 目录 简单选择排序 1 基本思想 2 动态图解 3 代码 4 复杂度分析 简单选择排序 1 基本思 ...

  2. 《排序算法系列一、简单选择排序》

    2019独角兽企业重金招聘Python工程师标准>>> 一.简单选择排序 描述:给定待排序序列A[ 0......n ] ,选择出第i小元素,并和A[i]交换,这就是一趟简单选择排序 ...

  3. 两种选择排序算法:简单选择排序、堆排序

    一.简单选择排序 空间复杂度:O(1) 时间复杂度:O(n^2) 稳定性:不稳定 适用性:顺序表.链表 //简单选择排序 void SelectSort(int A[],int n){for(i=0; ...

  4. 简单选择排序验证性实验

    题目描述  请创建一个一维整型数组用来存储待排序关键码,关键码从数组下标为1的位置开始存储,下标为0的位置不存储关键码.输入关键码的个数,以及各个关键码,采用简单选择排序的方法对关键码数组进行排序,输 ...

  5. 选择排序:简单选择排序

    1. 选择排序思想 (1.1)选择排序的基本思想是:每一趟(例如第i趟)在后面n-i+1(i=1,2, ... , n)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做 ...

  6. 简单选择排序_一文带你读懂排序算法(一):冒泡 amp; 快速选择排序 amp; 简单插入排序算法...

    点击上方「蓝字」关注我们 排序是确保数据规则有序的有效手段.日常开发里,我们常用到的是"冒泡"."插入排序"."选择排序"三种.大部分情况下 ...

  7. 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树

    文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...

  8. 排序算法——简单选择排序(PythonJava)

    基本思想 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素( ...

  9. 简单选择排序(Simple Selection Sort)

    介绍: 简单选择排序的工作方式突出"选择"二字,每次从待排序数据中选择符合条件的元素放在已排序元素末尾.对于少量元素的排序,简单选择排序是一个有效的算法. 思想: 第一次从待排序的 ...

最新文章

  1. Windows Server中的故障转移群集的实现机制
  2. VS2010/MFC编程入门之十七(对话框:文件对话框)
  3. 回头再学Asp.net系列--基础篇(六)
  4. [转]用C/C++扩展PHP详解
  5. Web前端笔记-two.js加载图片
  6. 在flask-sqlalchemy中使用max min avg方法
  7. 8 | Spatial-based GNN/convolution模型之GAT(受欢迎)
  8. 【渝粤教育】国家开放大学2018年春季 0175-22T社会调查研究与方法 参考试题
  9. java类的加载与初始化_Java类何时以及如何加载和初始化?
  10. selenium系列--测试脚本--将Excel文件用于测试(unittest数据驱动实战)
  11. 关于GTPv1协议解析
  12. 如何让mysql数据库支持超大图片
  13. JavaDay13 抽象类 、接口、多态
  14. [hadoop3.x]HDFS中的内存存储支持(七)概述
  15. 3.4 随机变量的相互独立性
  16. LeetCode680删除一个字符后是否还是回文字符串
  17. 同样诞生于顶尖大学,一个市值千亿,一个曾经仅次腾讯百度,如今却。。。...
  18. Android工程师技能表
  19. java.util.Date和java.sql.Timestamp转换
  20. c语言 模拟tftp——tftp客户端/服务器端仿写

热门文章

  1. python自动微信抢红包_抢红包,我还真没落下过!每个都抢得到!用Python实现自动抢红包...
  2. MCMC抽样---Metropolis算法
  3. ffmpeg格式转换之MP4转mov
  4. 内网渗透之Windows反弹shell(一)
  5. 基于STM32单片机的智能窗帘仿真设计
  6. redhead红帽系统配置yum源
  7. 【CF #777 div2】A—D
  8. 新手向强化学习入门:机器如何理解世界以及RL基本概念
  9. 三天打鱼两天晒网(C语言)
  10. 洛谷P3567 KUR-Couriers 主席树