排序算法的体验游戏

  今天监考排座位时出现了一些混乱。

  我要求他们按顺序每列N人坐好。若学号是连续的,1到N号第1列,N+1到2N号第2列,这个好说。乱就乱在,参加考试的同学的学号不连续,中间有断号。规则说来简单,若2号、3号空缺,4号需要直接坐在1号后面。

  由于手头没有名单,这对于每位同学而言,确实困难,35号必须要看到前面紧临的31号坐定才能确定自己的位置。这是一个必须顺序完成的任务。一时间,学生们陷入相互等待,在教室后面缩成一堆,谁也不动。最后,我和班干部采用了逐个叫号的方式才将坐位排定。

  坐定之后,我对同学们只知道面面相觑表达了不满。解决这个问题,学号小的同学应该立即行动找到自己的位置,学号大的同学紧随其后,可以相互间及时交流学号信息,确定谁前谁后。在大学中的学习,除了专业知识,其他的素质也要提高。这件事情,反映出了在共有需求(早坐好,就能早发卷)下,整个群体或者是对规则缺乏理解力,或者就是相互观望相互依赖性太多。执行力、领导力在这件事情上能够体现,立刻主动地行动,而不是等谁挨个叫号,培养的也就是这样的素质。

  我和同学们说,如果这是一场招聘会,给出一个规则,谁能够迟早掌握并及时做出行动,这个人将占得先机。如果这是在工作中的一个场景,竞争对手间谁脱颖而出,结果很显然。立即行动,作为一个很重要的习惯要自己培养,事事可以培养。

  考试开始了,同学们进入了紧张的答题。无聊的监考老师,此刻却是头脑中可以极尽自由的时候,各种胡思乱想,随便。

  我想到,刚才的事情,就是一个排序问题。排序,是计算机科学中的一个基本问题,无论计算机求解问题,还是日常生活中的问题,排序随处可见。这些学生这学期正学数据结构和算法,这件事,他们可以用学到的算法作指导。

  在程序设计课程中,我提倡同学们自己做点卡片写上数字,按算法流程比较、移动,体验排序算法。最简单的,直接用扑克牌就可以。匈牙利 Sapientia 大学的大学生,将 6 种排序算法编成舞蹈,很是好玩(点击“链接”可以看到的是其中的冒泡排序舞蹈秀)。我曾经和儿子一起,拍过一个扑克版的排序视频。

  传统的这些算法,都是单控制流的。程序设计、算法与数据结构课,也只关注单控制流的算法。

  今天的场景,可以编排成一个体现多控制的排序游戏。再说高大上一些,归为多处理器的并行排序,或者多Agent的协调,都可以。

  游戏规则:制作 n 张卡片,印上随机的数字,随机的发给排成一行的 n 个游戏参与者,相邻的人可以互看卡片比较大小,必要时交换位置,最后按手持卡片中数字的顺序排好顺序。要做的基本操作只是比较、交换位置,是多人同时进行的。在这里,每个人,就是一个处理器,就是一个Agent。为增加游戏的趣味性,由两组或多组人同时做这一件事,最快者获胜。要在课堂上玩,简便的奖惩手段,由赢者刮输者的鼻子。

   还可以让这些人坐在教室中的同一列座位上,坐着的人不动,前后相邻的人交换卡片。一样的道理。

  这个游戏前,不必讲并行算法的思想,可以重复几次,学生群体借此悟到有效的策略。

  除了体验排序算法,这个游戏的功能还有团队精神和合作能力的培养——每一个“处理器”都需要努力,才能尽快地完成,任何个人的迟疑、等待,都不利于团队最终的目标实现。不得不说,当前的大学生人人都想着自主,但凡事都等着有人统一指挥,缺少了在团队中的等量投入,自己的自主能力也得不到提高。

  这个游戏,以后可以用到课堂里,也可以用到课外团队拓展训练中。用这个游戏训练过的学生,安排座位不用这么费劲,做其他事情也会不一样。

  有闲的监考,带来了好点子。

=================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====
时间: 2024-11-05 01:28:35

排序算法的体验游戏的相关文章

数据结构实践——大数据集上排序算法性能的体验

本文是针对[数据结构基础系列(9):排序]的实践项目. [项目 - 大数据集上排序算法性能的体验] 设计一个函数,产生一个至少5万条记录的数据集合.在同一数据集上,用直接插入排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序等算法进行排序,记录所需要的时间,经过对比,得到对复杂度不同的各种算法在运行时间方面的感性认识. 提示1:这一项目需要整合多种排序算法,可以考虑先建设排序算法库,作为我们这门课算法库的收官之作: 提示2:本项目旨在获得对于复杂度不同算法的感性认识,由于数据分布

搜索引擎常用的三种网站排序算法

搜索引擎如何对互联网上那么多的网站进行合适的排名?想必做站长的都想知道这一点,这是通过一套非常繁琐复杂的算法计算出来的,具体的算法想必没有几个人知道,但是最常用的三种算法还是需要大家去了解一下的. 1.词频位置加权排序算法:顾名思义是说从整个网站上的文字的位置上与出现的次数进行排序,先来说一下位置,不同的网站关键词在内容里出现与在标题里面出现时差别非常大的,搜索引擎认为标题能表现出一个网站是干什么的,如果标题里面出现了关键词要远比文章里面出现关键词重要的多的多.这就是现在大家都知道一个网站的标题

百度调整移动搜索排序算法 提升APP排名结果

新浪科技讯 4月11日上午消息,百度宣布开始对移动搜索排序算法进行调整,鼓励网站运营者与站长进行手机页的优化,同时新规则还将提升手机APP的排名. 百度相关负责人表示,目前用手机访问PC网站难以获得最佳浏览体验,经过此次调整与页面优化,用户将看到更加适应手机屏幕.简洁的搜索页面. 目前,百度针对网站主提供"兼有手机站和PC站"."只有手机站"."只有PC站"三类不同的优化帮助.网站主可以通过登录百度无线主页(open.shouji.baidu.c

十大经典排序算法的JS版

前言 读者自行尝试可以想看源码戳这(https://github.com/damonare/Sorts),博主在github建了个库,读者可以Clone下来本地尝试.此博文配合源码体验更棒哦 这世界上总存在着那么一些看似相似但有完全不同的东西,比如雷锋和雷峰塔,小平和小平头,玛丽和马里奥,Java和javascript-.当年javascript为了抱Java大腿恬不知耻的让自己变成了Java的干儿子,哦,不是应该是跪舔,毕竟都跟了Java的姓了.可如今,javascript来了个咸鱼翻身,几乎

百度对移动搜索排序算法作调整 鼓励手机页

中介交易 SEO诊断 淘宝客 云主机 技术大厅 近日,百度宣布开始对移动搜索排序算法进行调整,鼓励网站运营者与站长进行手机页的优化,同时还根据新规则提升手机APP的结果排名.百度此次算法调整解决了传统网页在移动终端的适配展现问题,有效改善近5亿手机用户的搜索体验.同时将为数百万家网站和应用开发者的发展指明方向,推动传统网站向移动终端的大规模迁移. 据了解,2011年中国移动互联网用户规模达4.3亿,环比增长50%,但传统网页的终端适配一直未能得到有效解决,极大的影响了这一移动用户群体的应用体验.

PHP 四种基本排序算法的代码实现(1)

许多人都说算法是程序的核心,算法的好坏决定了程序的质量.作为一个初级phper,虽然很少接触到算法方面的东西.但是对于基本的排序算法还是应该掌握的,它是程序开发的必备工具.这里介绍冒泡排序,插入排序,选择排序,快速排序四种基本算法,分析一下算法的思路. 前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序

常用的各种排序算法

//常用的排序算法 #include <iostream> using namespace std; typedef int ElemType; /* 1.插入排序 (1)直接插入排序算法 算法思想:将等排序列划分为有序与无序两部分,然后再依次将无序部分插入到已经有序的部分,最后 就可以形成有序序列. 操作步骤如下: 1)查找出元素L(i)在表中的插入位置K: 2)将表中的第K个元素之前的元素依次后移一个位置: 3)将L(i)复制到L(K). 时间复杂度为:O(n^2) */ void Ins

各种排序算法汇总

目录 简介 交换排序 冒泡排序 快速排序 插入排序 直接插入排序 希尔排序 选择排序 简单选择排序 堆排序 归并排序 基数排序 总结 简介 排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列.分内部排序和外部排序.若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序.反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序.内部排序的过程是一个逐步扩大记录的有序序列长度的过程

九大排序算法总结

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等. 算法一:插入排序 插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法步骤 1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当