0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简单选择排序算法的流程,代码,性能等详细资料概述

算法与数据结构 来源:未知 作者:易水寒 2018-08-18 10:47 次阅读

简单选择排序是一种选择排序。

选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。

简单排序处理流程

(1)从待排序序列中,找到关键字最小的元素;

(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;

(3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。

如图所示,每趟排序中,将当前第 i 小的元素放在位置 i 上。

核心代码

publicvoidselectionSort(int[]list){//需要遍历获得最小值的次数//要注意一点,当要排序N个数,已经经过N-1次遍历后,已经是有序数列for(inti=0;i< list.length - 1; i++) {        int temp = 0;        int index = i; // 用来保存最小值得索引        // 寻找第i个小的数值        for (int j = i + 1; j < list.length; j++) {            if (list[index] >list[j]){index=j;}}//将找到的第i个小的数值放在第i个位置上temp=list[index];list[index]=list[i];list[i]=temp;System.out.format("第%d趟: ",i+1);printAll(list);}}算法分析

简单选择排序算法的性能

时间复杂度

简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数总是N (N - 1) / 2。

而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0.

当序列反序时,移动次数最多,为3N (N - 1) / 2。

所以,综合以上,简单排序的时间复杂度为O(N2)。

空间复杂度

简单选择排序需要占用 1 个临时空间,在交换数值时使用。

完整参考代码

JAVA版本

代码实现

1packagenotes.javase.algorithm.sort;23importjava.util.Random;45publicclassSelectionSort{67publicvoidselectionSort(int[]list){8//需要遍历获得最小值的次数9//要注意一点,当要排序N个数,已经经过N-1次遍历后,已经是有序数列10for(inti=0;i< list.length - 1; i++) {11             int temp = 0;12             int index = i; // 用来保存最小值得索引13  14             // 寻找第i个小的数值15             for (int j = i + 1; j < list.length; j++) {16                 if (list[index] >list[j]){17index=j;18}19}2021//将找到的第i个小的数值放在第i个位置上22temp=list[index];23list[index]=list[i];24list[i]=temp;2526System.out.format("第%d趟: ",i+1);27printAll(list);28}29}3031//打印完整序列32publicvoidprintAll(int[]list){33for(intvalue:list){34System.out.print(value+" ");35}36System.out.println();37}3839publicstaticvoidmain(String[]args){40//初始化一个随机序列41finalintMAX_SIZE=10;42int[]array=newint[MAX_SIZE];43Randomrandom=newRandom();44for(inti=0;i< MAX_SIZE; i++) {45             array[i] = random.nextInt(MAX_SIZE);46         }47  48         // 调用冒泡排序方法49         SelectionSort selection = new SelectionSort();50         System.out.print("排序前: ");51         selection.printAll(array);52         selection.selectionSort(array);53         System.out.print("排序后: ");54         selection.printAll(array);55     }56  57 }

运行结果

排序前:3528120841第1趟:0528123841第2趟:0128523841第3趟:0118523842第4趟:0112583842第5趟:0112283845第6趟:0112238845第7趟:0112234885第8趟:0112234588第9趟:0112234588排序后:0112234588

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4437

    浏览量

    90552
  • 代码
    +关注

    关注

    30

    文章

    4536

    浏览量

    66496
  • 排序
    +关注

    关注

    0

    文章

    31

    浏览量

    9653

原文标题:排序算法总结(6):简单选择排序

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    NRF2410无线通讯模块原理,程序,驱动,源代码详细资料

    NRF2410无线通讯模块原理,程序,源代码详细资料 RF射频芯片nRF2401应用程序,控制器采用ATmega8芯片;制作nRF2401无线通讯模块的 详尽资料,包括电路原理图,印
    发表于 06-27 09:47

    TI的基于DSP兼容的第三方算法协议的详细资料概述

    本文的主要内容介绍的是TI的基于DSP兼容的第三方算法协议的详细资料概述
    发表于 05-07 17:04 8次下载
    TI的基于DSP兼容的第三方<b class='flag-5'>算法</b>协议的<b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    Stellaris系列产品的选择详细资料概述

    本文的主要内容介绍的是TI的产品Stellaris系列产品的选择详细资料概述
    发表于 05-09 15:59 8次下载
    Stellaris系列产品的<b class='flag-5'>选择</b><b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    9013流水灯的介绍和设计详细资料概述

    一个简单流水灯9013流水灯的介绍和设计详细资料概述
    发表于 06-05 08:00 0次下载
    9013流水灯的介绍和设计<b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    常用的非比较排序算法:计数排序,基数排序,桶排序详细资料概述

    这篇文章中我们来探讨一下常用的非比较排序算法:计数排序,基数排序,桶排序。在一定条件下,它们的时间复杂度可以达到O(n)。
    的头像 发表于 06-18 15:11 6791次阅读
    常用的非比较<b class='flag-5'>排序</b><b class='flag-5'>算法</b>:计数<b class='flag-5'>排序</b>,基数<b class='flag-5'>排序</b>,桶<b class='flag-5'>排序</b>的<b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    开关电源的正激变换器基本工作原理及元器件如何选择详细资料概述

    开关电源的正激变换器基本工作原理及元器件如何选择详细资料概述
    的头像 发表于 07-17 19:13 1.2w次阅读
    开关电源的正激变换器基本工作原理及元器件如何<b class='flag-5'>选择</b>等<b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    PID程序算法详细资料概述免费下载

    本文档的主要内容详细介绍的是PID程序算法详细资料概述免费下载
    发表于 07-24 08:00 36次下载

    如何使用万用表简单判断旋转编码器?的详细资料概述

    本文档的主要内容详细介绍的是如何使用万用表简单判断旋转编码器?的详细资料概述
    发表于 09-10 08:00 15次下载

    几种c语言程序的排序包括应用程序等资料免费下载

    本文档的主要内容详细介绍的是几种c语言程序的排序包括应用程序好资料免费下载包括了:堆排序,改进冒泡排序,归并
    发表于 09-29 08:00 6次下载
    几种c语言程序的<b class='flag-5'>排序</b>包括应用程序等<b class='flag-5'>资料</b>免费下载

    FPGA的设计流程是怎么样的?FPGA设计流程指南详细资料免费下载

    本文档的主要内容详细介绍的是FPGA的设计流程是怎么样的?FPGA设计流程指南详细资料免费下载内容包括了:1.基于HDL 的FPGA 设计流程
    发表于 10-17 17:50 29次下载
    FPGA的设计<b class='flag-5'>流程</b>是怎么样的?FPGA设计<b class='flag-5'>流程</b>指南<b class='flag-5'>详细资料</b>免费下载

    如何选择排序法和C语言程序代码详细资料概述

    选择排序法是从算法优化的角度对冒泡法的改进,其改进的思想是:经过一轮的两两比较后,并不马上交换数的位置,而是找到本轮最小的数,记下该数的位置(即在数组中的下标),待本轮比较完毕后,通过一次交换即可将本轮最小的数交换到位
    发表于 10-26 17:15 2次下载
    如何<b class='flag-5'>选择</b><b class='flag-5'>排序</b>法和C语言程序<b class='flag-5'>代码</b>的<b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    C语言教程之如何选择结构程序设计的详细资料概述

    本文档的主要内容详细介绍的是C语言教程之如何选择结构程序设计的详细资料概述
    发表于 11-02 10:53 3次下载
    C语言教程之如何<b class='flag-5'>选择</b>结构程序设计的<b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    数码管跑马灯实验的目标和流程图及程序的详细资料概述

    本文档的主要内容详细介绍的是数码管跑马灯实验的目标和流程图及程序的详细资料概述免费下载。
    发表于 11-12 08:00 17次下载
    数码管跑马灯实验的目标和<b class='flag-5'>流程</b>图及程序的<b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    FPGA视频教程之FPGA开发流程详细资料概述

    本文档的主要内容详细介绍的是FPGA视频教程之FPGA开发流程详细资料概述免费下载。
    发表于 03-01 11:35 11次下载
    FPGA视频教程之FPGA开发<b class='flag-5'>流程</b>的<b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    图论算法及MATLAB程序代码详细资料说明

    本文档的主要内容详细介绍的是图论算法及MATLAB程序代码详细资料说明。
    发表于 04-23 08:00 0次下载
    图论<b class='flag-5'>算法</b>及MATLAB程序<b class='flag-5'>代码</b>的<b class='flag-5'>详细资料</b>说明