【DS】排序算法之选择排序(Selection Sort)
一、算法思想
选择排序是一种简单直观的排序算法。它的工作原理如下:
1)将序列分成两部分,前半部分是已经排序的序列,后半部分是未排序的序列;
2)在未排序序列中找到最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
二、算法示意图

图中阴影部分是未排序的序列,黄色部分是排序好的序列。第一行是待排序的初始序列,最后一行是排好序的序列。
从第一行中选择出最小的元素1,将其和未排序序列的第一个元素交换,从而形成第二行。第二行从阴影部分找到最小的元素2,将2和阴影部分的第一个元素8交换,形成第三行。其实这个过程和冒泡排序非常相似,只是如何将下一个元素移动到排序序列的最末端的方式不一样。如此继续下去,就可以完成序列排序。
三、Java代码
//@wiki
public class SelectionSort extends Sort{
public static void sort(int[] array) {
int temp;
int min;
for (int index = 0; index < array.length - 1; index++) {
printArray(array);
min = index;
for (int next = index + 1; next < array.length; next++) {
if (array[next] < (array[min])) {
min = next;
}
}
temp = array[index];
array[index] = array[min];
array[min] = temp;
}
}
}
算法简单,不解释。
四、算法复杂度
选择排序的算法复杂度很好分析,因为从代码来看,其算法复杂度与初始序列无关,假设初始序列元素的个数为n,则算法复杂度为O(n^2),因为第10行会执行n*(n-1)/2。因此选择排序的最优/最差/平均时间复杂度都是O(n^2)。
空间复杂度非常容易,由代码可以看出来,只需要一个位置temp用于交换即可,因此是O(1)。
【DS】排序算法之选择排序(Selection Sort)的更多相关文章
- Python排序算法之选择排序定义与用法示例
Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...
- 八大排序算法~简单选择排序【记录下标k变量的作用】
八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...
- 排序算法总结------选择排序 ---javascript描述
每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...
- 【排序算法】选择排序(Selection sort)
0. 说明 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最 ...
- 八大排序算法之三选择排序—简单选择排序(Simple Selection Sort)
基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素 ...
- 八大排序算法之四选择排序—堆排序(Heap Sort)
堆排序是一种树形选择排序,是对直接选择排序的有效改进. 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆.由堆的定义可以看出,堆顶元素(即第一个元素) ...
- 常用排序算法之——选择排序(C语言+VC6.0平台)
选择排序是另一种经典排序算法,核心思想是:在一趟找最小(大)数的过程中,先假设待排数据中的第一个数据即为最小(大)数据,然后循环将其他数据与该数据比较,每次比较时若小于该数据则让新数据成为最小(大)数 ...
- Python排序算法之选择排序
选择排序 选择排序比较好理解,好像是在一堆大小不一的球中进行选择(以从小到大,先选最小球为例): 1. 选择一个基准球 2. 将基准球和余下的球进行一一比较,如果比基准球小,则进行交换 3. 第一轮过 ...
- Java排序算法之选择排序
一.算法原理 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据}:第1趟排序,在待排序数据arr[1]~arr[n-1]中选出最小的数据,将它与arrr[0]交换:第2趟,在待排序 ...
随机推荐
- NetBeans 插件开发简介
希望 NetBeans 为您提供更多功能吗? 您希望倾心投入到 NetBeans 的开发中,并希望它能激发您开发另一个应用程序的热情.您希望聆听音乐.浏览网页.查看邮件.存储喜欢的 URL,以及维护日 ...
- Js_特效
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcE ...
- 以太坊—P2P网络
Chord算法 1.Chord 概念 Chrod算法是P2P中的四大算法之一,是有MIT(麻省理工学院)于2001年提出 . Chord的目的是提供一种能在P2P网络快速定位资源的的算法,Chord并 ...
- WebShell代码分析溯源(第1题)
<?php $POST['POST']='assert';$array[]=$POST;$array[0]['POST']($_POST['assert']);?> assert,是php ...
- Mac OS系统四种修改Hosts文件的方法列举
转自:https://blog.csdn.net/u012460084/article/details/40186973 使用Mac OS X系统的用户,在某些时候可能遇到了需要修改系统Hosts文件 ...
- 1082. Read Number in Chinese (25)-字符串处理
题意就是给出9位以内的数字,按照汉子的读法读出来. 读法请看下方的几个例子: 5 0505 0505 伍亿零伍佰零伍万零伍佰零伍 5 5050 5050 伍亿伍仟零伍拾万伍仟零伍拾 (原本我以为这个 ...
- 团队项目作业四 - WBS
WBS 即 Work Breakdown Structure 工作分解结构, 经过我们小组的讨论,对于手机计算器APP的工作分解结构,定为以下几个方面: 1.APP框架搭建,按钮的设计,对按钮的响应等 ...
- Linux 基础一(系统分区、格式化与挂载)
1.Linux 基础之系统分区与格式化 讲分区之前,先说一下硬盘结构:硬盘(机械)的横截面是一个圆,并且被分成等大小的扇区,每个扇区的大小是 512Byte,其中有 446Byte 被用来存储启动信息 ...
- convert函数语法
convert函数语法: CONVERT(data_type(length), data_to_be_converted, style)data_type(length) 规定目标数据类型(带有可 ...
- [转帖]kubeadm 实现细节
kubeadm 实现细节 http://docs.kubernetes.org.cn/829.html 1 核心设计原则 2 常量和众所周知的值和路径 3 kubeadm init 工作流程内部设计 ...