排序-2-选择排序

前言
旨在

在对dx和dy这类无穷小量的研究中,《微积分的历程》中指出

牛顿是这种动态方法的倡导者。

诚然,学习微积分的过程充满了形同“割之弥细,所失弥少”的思考。不仅如此,牛顿的弦截法和牛顿二项展开式充满了递归思想,而这种过程用动态形式展现最好不过。如果非要说我们有什么理念的话,那么我们一切旨在用简单和谐的动态过程描述算法。我先承诺会对弦截法和牛顿二项展开式进行描述。最后,用Python和C++实现。(如果Python有时间的话)。

选择排序(Selection Sort)

选择排序有着和冒泡排序一样简单的思路。
即每次遍历标记最小的数,然后与最前面的数交换。
只要进行n-1次遍历就可以完成排序。
注意,我们一般,选择排序每次挑出最小的数放在最前面,冒泡排序每次把最大的数放在最后面。两者也可以互换,只要你条理清晰即可。

选择排序与冒泡排序的区别

这里多扯两句。因为笔者曾把选择排序错写成冒泡排序。选择排序每次遍历完,只找到最小数的位置,然后交换。因为每次遍历仅交换一次,选择排序的交换次数仅为n-1,比冒泡排序少得多。(注意区分交换次数和比较次数)。因为交换次数少,所以选择排序要比冒泡排序快,但也引发了选择排序的不稳定问题。

简言之,冒泡排序与选择排序最大的区别在于寻找最小(最大)元素的方式不同。

选择排序的不稳定问题

这里直接举百度百科的例子

选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。

因此要对此进行优化(笔者在一道题目里遇见的,才意识到问题,也算是见识浅薄了),然而优化以后,效率也有损耗。我们时常用到快速排序,更快,然而也是不稳定的,在下一个博客,我们将会谈到。

选择排序的时间复杂度

选择排序的比较次数也是n(n-1)/2次。因此它的复杂度也是Ο(N²)

选择排序的一个例子

我们依然输入一个数组,数组里有五个数[48 38 15 27 4],我们对这五个数进行从小到大的排序。

一些说明

黄色表示每次循环最小的数将要交换的位置,一次是从1到5;
绿色显示遍历的情况;
temp指针(实际操作中我们也可以用一个数p来标记下标值)指向当前(即遍历过程)最小的元素位置,当遍历到末尾最后一个元素的时候temp所指即为最小数,temp指针随之变为黄色;
红色表示已经交换并且排好序的元素。

具体过程

第一次遍历


选择排序-step1.PNG

第二次遍历


选择排序-step2.PNG

第三次遍历
选择排序-step3.PNG

第四次遍历


选择排序-step4.PNG

等价的
等价.PNG
时间复杂度
选择排序的动态演示

这是一个选择排序的动态演示。


选择排序.gif
C++代码实现
//选择排序原理:每趟把最小的数放在第一位。(按从小到大顺序)
//注意为啥不把最大的数放在最后一位呢(也可以)
#include <iostream>
using namespace std;
int main()
{
  int array[5];
  for(int i = 0; i < 5; i++)
  {
    cin>> array[i];
  }
  for(int i = 0; i < 4; i++)
    {
        int p = i;
        for(int j = i+1; j < 5; j++)//注意比较次数。
        {
            if(array[p] > array[j])
            {
               p = j;
            }
        }
        if(p != i)
            {
              int exchange = array[p];
              array[p] = array[i];
              array[i] = exchange;
            }
    }
  for(int i = 0; i < 5; i ++)
  {
    cout<< array[i]<<' ';
  }
  return 0;
}
写在后面
关于选择排序

快速排序见。

参考文献

 wikipedia
 《微积分的历程》

使用工具

 visualgo(参考http://visualgo.net)
 GifCam

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,149评论 0 52
  • 真正有才智的人,决不会锋芒外露。锋芒外露,虽然会给自己带来一定声誉,但也会给自己带来非议;虽然会给自己带来一时的快...
    無铭高地陈泓印阅读 1,019评论 0 1
  • 你若美好,世界便会美好。 阳光洒进房间的时候,6点半的闹钟刚好响了,我刚好醒了。睁开眼,看着阳光,心里默默地说:嗯...
    安心与七妹阅读 224评论 0 1
  • 渝北风恋,乞巧楼孤夜如水。 天幕低垂,新月西怜女儿眉。 情隔天河,咫尺千年空响琢。 长歌坚平,眷属终成一路行。 易...
    空明源阅读 144评论 0 1