选择排序法 - Selection Sort

简单记录-bobo老师的玩转算法系列–玩转算法 -排序基础

排序算法

O(n^2)的排序算法

为什么要学习O(n^2)的排序算法?

为什么要学习O(n^2)的排序算法?

  • 基础

  • 基础

  • 编码简单,易于实现,是一些简单情景的首选

  • 在一些特殊情况下,简单的排序算法更有效

  • 简单的排序算法思想衍生出复杂的排序算法

  • 作为子过程,改进更复杂的排序算法

Selection Sort 选择排序

选择排序算法思想

选择排序算法思想:

Selection Sort 选择排序

选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。选择是找出最小的元素。

选择排序就是从序列中找到最小的元素,和第一个位置的元素互换。

然后从第二个位置开始,剩下的元素中找到最小的元素,和第二个位置的元素互换。

or (每一趟在 n- i + 1(i = 1,2,3…,n-1)个元素中选取关键字最小的元素与第 i 个元素交换,并作为有序序列中的第 i 个元素。)

例如:{10,9,8,7,6,5,4,3,2,1}

第一趟: 就是在10个元素选择关键字最小的元素也就是1与第1个元素交换,1就是作为有序序列中的第1个元素。

第二趟:剩下的9个元素中继续这种选择和交换,选择关键字最小的元素也就是2与第2个元素进行交换,2就是作为有序序列中的第2个元素了。

操作:选择排序代码实现

操作:选择排序代码讲解

01-Selection-Sort main.cpp

#include <iostream>
#include <algorithm> using namespace std; void selectionSort(int arr[], int n){ for(int i = 0 ; i < n ; i ++){
// 寻找[i, n)区间里的最小值
int minIndex = i;
for( int j = i + 1 ; j < n ; j ++ )
if( arr[j] < arr[minIndex] )
minIndex = j; swap( arr[i] , arr[minIndex] );
} } int main() { int a[10] = {10,9,8,7,6,5,4,3,2,1};
selectionSort(a,10);
for( int i = 0 ; i < 10 ; i ++ )
cout<<a[i]<<" ";
cout<<endl; return 0;
}

Java版

package algo;

public class SelectionSort {

    // 我们的算法类不允许产生任何实例
private SelectionSort(){} public static void sort(int[] arr){ int n = arr.length;
for( int i = 0 ; i < n ; i ++ ){
// 寻找[i, n)区间里的最小值的索引
int minIndex = i;
for( int j = i + 1 ; j < n ; j ++ )
if( arr[j] < arr[minIndex] )
minIndex = j; swap( arr , i , minIndex);
}
} private static void swap(int[] arr, int i, int j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
} public static void main(String[] args) { int[] arr = {10,9,8,7,6,5,4,3,2,1};
System.out.println("SelectionSort选择排序:");
for( int i = 0 ; i < arr.length ; i ++ ){
System.out.print(arr[i]);
System.out.print(' ');
}
System.out.println();
}
}

Result

D:\Environments\jdk-11.0.2\bin\java.exe -javaagent:D:\Java\ideaIU-2019.2.win\lib\idea_rt.jar=5368:D:\Java\ideaIU-2019.2.win\bin -Dfile.encoding=UTF-8 -classpath D:\IdeaProjects\imooc\Play-with-Algorithms\02-Sorting-Basic\out\production\01-Selection-Sort algo.SelectionSort
SelectionSort选择排序:
10 9 8 7 6 5 4 3 2 1 Process finished with exit code 0

【排序基础】1、选择排序法 - Selection Sort的更多相关文章

  1. 【java基础】选择排序and冒泡排序

    前言 : 今天学习的是J2SE视频里的第五章,数组部分,它里面留了一个经典的作业,就是让我们去从1倒9按一定规格排序,这让我想起了学习vb的时候最最让我头疼的两种排序方法,选择排序法 和 冒泡排序法. ...

  2. C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

    C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...

  3. [Swift]八大排序算法(三):选择排序 和 简单选择排序

    排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...

  4. 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)

    不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...

  5. 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)

    程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现) 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现) 程序员必知的8大排序(三)-------冒 ...

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

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

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

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

  8. 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较

    2.3 归并排序 接口定义: int merge(void* data, int esize, int lpos, int dpos, int rpos, int (*compare)(const v ...

  9. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-001选择排序法(Selection sort)

    一.介绍 1.算法的时间和空间间复杂度 2.特点 Running time is insensitive to input. The process of finding the smallest i ...

随机推荐

  1. WinUI 3 Preview 3 发布了,再一次试试它的性能

    1. WinUI 3 在微软 Build 2020 开发者大会上,WinUI 团队宣布可公开预览的 WinUI 3 Preview 1,它让开发人员可以在 Win32 中使用 WinUI.最终 XAM ...

  2. Python爬虫之BeautifulSoup库

    1. BeautifulSoup 1.1 解析库 1)Python标准库 # 使用方法 BeautifulSoup(markup, "html.parser") # 优势 Pyth ...

  3. EasyExcel导入

    记录摸鱼的一天 技术栈:spring boot2.x+mybatis plus+easyExcel 2.2.6 生成简单的实体类等等等等 导入easyExcel的依赖 实体类 编写服务层 import ...

  4. 前端:css3的过渡与动画

    一.css3过渡知识 (一).概述 1.CSS3过渡是元素从一种样式逐渐改变为另一种的效果.      2.实现过渡效果的两个要件:    规定把效果添加到那个css属性上.    规定效果时长 定义 ...

  5. AdaBoost 算法-分析波士顿房价数据集

    公号:码农充电站pro 主页:https://codeshellme.github.io 在机器学习算法中,有一种算法叫做集成算法,AdaBoost 算法是集成算法的一种.我们先来看下什么是集成算法. ...

  6. [水题日常]UVA1639 糖果(Candy,ACM/ICPC Chengdu 2012)

    今天来尝试了几道数学期望相关的题,这是我认为比较有趣的一道题 这次不废话啦直接开始~ 一句话题意:两个分别装有n个糖果的盒子,每次随机选一个盒子然后拿走一颗糖(选的概率分别是\(p\)和\((1-p) ...

  7. Docker 笔记学习

    文章目录 概述 CentOS7 Docker 安装 启动 Docker 后台服务 镜像加速 Docker常用命令 如何创建一个镜像 存储和载入镜像 上传镜像 容器的基本操作 创建容器 终止容器 如何进 ...

  8. Gradle AndroidStudio内网离线构建配置踩坑记录

    最近一家新公司,由于办公环境都是在内网机上,导致在Unity导出android工程后,gradle离线构建也是第一次搞,花了一天时间也踩了一些坑,最后也终于构建成功了,这里记录下,方便大家少走些弯路. ...

  9. 写一个简单的HTML留言板

    最近有点懒,没码什么字,防止遗忘,从头开始码,写一个简单的HTML留言板.包含两个文件,book.html还有style.css,放在同一目录下. book.html 1 <!DOCTYPE h ...

  10. Python 写了一个批量生成文件夹和批量重命名的工具

    Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...