美文网首页
数据结构与算法系列(选择排序)

数据结构与算法系列(选择排序)

作者: timothyue1 | 来源:发表于2018-12-22 16:04 被阅读0次

选择排序

选择排序是一种很简单直观的排序算法,主要思想就是每次从待排序的元素中选择出最大或最小的那个元素,然后将其放至已排序序列的末尾,直到全部待排序序列都排序完毕。

排序要点

1.初始状态时,待排序序列为a1,a2,…an,已排序序列为空。
2.第一趟排序,从待排序序列中找到最大或最小元素ak,将其与待排序序列的第一个元素a1对换,此时已排序序列为ak,长度为增加1,待排序序列长度减少1,变为n-1,其中ak被抽走了。
3.第二趟排序,从待排序序列中找到最大或最小元素aj,将其与待排序序列的第一个元素a2对换,此时已排序序列为ak,aj,长度增加1,变为2,待排序序列长度减少1,变为n-2,其中aj又被抽走了。
4.不断进行上面的排序操作,直到经过n-1趟排序后完成整个序列的排序。最终待排序序列为空,已排序序列长度为n。

排序过程

假设我们有如下5个元素,分别为84,25,59,71,62,现在进行选择排序。


image

第一趟,此时待排序序列为84,25,59,71,62,任务是从中找到最小元素,并与第一个元素调换作为已排序序列的第一个元素。最小元素可以通过逐一比较找到。头两个元素比较,较小的是25,

image

接着下一个元素59与25比较,较小的是25,

image

接着下一个元素71与25比较,较小的是25,


image

接着下一个元素62与25比较,较小的是25,完成全部元素比较,最小元素为25。


image

最小元素对调到原来待排序序列的第一个位置,即是放到已排序序列的尾部,此时已排序序列只有一个元素。而下一趟的待排序序列为84,59,71,62,继续寻找最小元素,84与59比较,59较小,

image

接着下一个元素71与59比较,较小的是59,


image

接着下一个元素62与59比较,较小的是59,完成全部元素比较,最小元素为59。

image

最小元素对调到原来待排序序列的第一个位置,即是放到已排序序列的尾部,此时已排序序列有两个元素。而下一趟的待排序序列为84,71,62,继续寻找最小元素,84与71比较,71较小,

image

接着下一个元素62与71比较,较小的是62,完成全部元素比较,最小元素为62。


image

最小元素对调到原来待排序序列的第一个位置,即是放到已排序序列的尾部,此时已排序序列有三个元素。而下一趟的待排序序列为71,84,继续寻找最小元素,71与84比较,71较小,

image

71为最小元素,对调到原来待排序序列的第一个位置,即是放到已排序序列的尾部,此时已排序序列有四个元素。下一趟只待排序序列只剩一个元素了,无需继续比较,直接添加到已排序序列的尾部,完成整个排序工作。


image

稳定性

排序的稳定性主要是指在待排序序列中,存在多个具有相同值的元素,如果经过某种排序算法后这些相同值的元素之间相对次序保持不变,则称该排序算法是稳定的。而如果它们之间相对次序打乱了,则为不稳定。

选择排序为不稳定排序算法。

假设我们要排序的序列为84,25,84,71,62,这其中包含了两个值为84的元素,按照选择排序方法对其进行排序。


image

第一趟排序,元素25和第一个元素84对调,

image

第二趟排序,元素62和第一个元素84对调,

image

第三趟排序,元素71和第二个元素84对调,


image

最终的状态如下,可以看到两个值为84的元素的次序已经变化了。


image

转自:https://blog.csdn.net/wangyangzhizhou/article/details/81734912

相关文章

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 算法与数据结构路线图

    学习算法与数据结构,深刻理解计算机科学 排序算法:插入、冒泡、选择、希尔、快速、归并、堆排序、计数排序、桶排序、基...

  • (转)排序算法

    排序算法点这里 数据结构与算法——计数排序、桶排序、基数排序

  • 算法与数据结构(六):堆排序

    title: 算法与数据结构(六):堆排序tags: [算法与数据结构, C语言, 堆排序]date: 2019-...

  • 数据结构与算法之美-28讲堆和堆排序

    数据结构与算法之美-28讲堆和堆排序 特别备注 本系列非原创,文章原文摘自极客时间-数据结构算法之美[https:...

  • C语言:关于数据的几种排序算法

    数据结构的排序算法有很多种。其中,快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法;基数排序、冒泡排序、...

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

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

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

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

  • 3.2-选择排序-堆排序

    参考链接 选择排序:堆排序(Heap Sort) 白话经典算法系列之七 堆与堆排序 堆排序与快速排序,归并排序一样...

  • Hash算法

    数据结构与算法分析:大纲数据结构:数组算法:hash算法算法:排序算法Java实现 1 Hash算法? 将任意长度...

网友评论

      本文标题:数据结构与算法系列(选择排序)

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