一、算法思想

选择排序是一种简单直观的排序算法。它的工作原理如下:

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)的更多相关文章

  1. Python排序算法之选择排序定义与用法示例

    Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...

  2. 八大排序算法~简单选择排序【记录下标k变量的作用】

    八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...

  3. 排序算法总结------选择排序 ---javascript描述

    每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...

  4. 【排序算法】选择排序(Selection sort)

    0. 说明 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最 ...

  5. 八大排序算法之三选择排序—简单选择排序(Simple Selection Sort)

    基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素 ...

  6. 八大排序算法之四选择排序—堆排序(Heap Sort)

    堆排序是一种树形选择排序,是对直接选择排序的有效改进. 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆.由堆的定义可以看出,堆顶元素(即第一个元素) ...

  7. 常用排序算法之——选择排序(C语言+VC6.0平台)

    选择排序是另一种经典排序算法,核心思想是:在一趟找最小(大)数的过程中,先假设待排数据中的第一个数据即为最小(大)数据,然后循环将其他数据与该数据比较,每次比较时若小于该数据则让新数据成为最小(大)数 ...

  8. Python排序算法之选择排序

    选择排序 选择排序比较好理解,好像是在一堆大小不一的球中进行选择(以从小到大,先选最小球为例): 1. 选择一个基准球 2. 将基准球和余下的球进行一一比较,如果比基准球小,则进行交换 3. 第一轮过 ...

  9. Java排序算法之选择排序

    一.算法原理 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据}:第1趟排序,在待排序数据arr[1]~arr[n-1]中选出最小的数据,将它与arrr[0]交换:第2趟,在待排序 ...

随机推荐

  1. (3)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Consul服务治理

    Consul是注册中心,服务提供者.服务提供者.服务消费者等都要注册到Consul中,这样就可以实现服务提供者.服务消费者的隔离. 除了Consul之外,还有Eureka.Zookeeper等类似软件 ...

  2. TensorFlow训练MNIST数据集(3) —— 卷积神经网络

    前面两篇随笔实现的单层神经网络 和多层神经网络, 在MNIST测试集上的正确率分别约为90%和96%.在换用多层神经网络后,正确率已有很大的提升.这次将采用卷积神经网络继续进行测试. 1.模型基本结构 ...

  3. jquery自动获取项目url路径

    //很多时候我们需要使用当前项目路径,但是如果把项目路径写死,会带来很多不便,此时就需要自动获取项目路径.//我们可以根据jquery来进行自动获取项目路径,获取方法如下function getRoo ...

  4. Linux 上传代码到github

    1.git init 初始化 2.git clone将刚刚创建的项目克隆下来 git clone https://github.com/... 3.进入到Project,编写代码 4.项目完成后执行g ...

  5. 利用HOG+SVM实现行人检测

    利用HOG+SVM实现行人检测 很久以前做的行人检测,现在稍加温习,上传记录一下. 首先解析视频,提取视频的每一帧形成图片存到磁盘.代码如下 import os import cv2 videos_s ...

  6. docker 学习笔记(1)--常用命令

    docker pull---- 获取image(镜像)docker build---- 创建image(镜像)docker images ----查询所有的image(镜像)docker run--- ...

  7. PAT甲题题解-1044. Shopping in Mars (25)-水题

    n,m然后给出n个数让你求所有存在的区间[l,r],使得a[l]~a[r]的和为m并且按l的大小顺序输出对应区间.如果不存在和为m的区间段,则输出a[l]~a[r]-m最小的区间段方案. 如果两层fo ...

  8. PAT甲级题解-1057. Stack (30)-树状数组

    不懂树状数组的童鞋,正好可以通过这道题学习一下树状数组~~百度有很多教程的,我就不赘述了 题意:有三种操作,分别是1.Push key:将key压入stack2.Pop:将栈顶元素取出栈3.PeekM ...

  9. 2-Python3从入门到实战—基础之运算符

    Python从入门到实战系列--目录 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 算术运算符 Pyt ...

  10. PAT 甲级 1087 All Roads Lead to Rome

    https://pintia.cn/problem-sets/994805342720868352/problems/994805379664297984 Indeed there are many ...