介绍:

  简单选择排序的工作方式突出"选择"二字,每次从待排序数据中选择符合条件的元素放在已排序元素末尾。对于少量元素的排序,简单选择排序是一个有效的算法。

思想:

  第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。

性能分析:

  时间复杂度:O(N^2)

  空间复杂度:O(1)

  稳定性:不稳定

代码实现:

// Java代码
class SimpleSelectionSort {public static void selectionSort(int[] a) {for (int i = 0; i < a.length - 1; ++i) {// 遍历序列int minIndex = i;// 记录最小元素位置// 遍历无序序列寻找最小元素for (int j = i + 1; j < a.length; ++j) {if (a[j] < a[minIndex]) {// 更新最小元素下标minIndex = j;}}// 将最小值放到已排序序列的末尾int temp = a[i];a[i] = a[minIndex];a[minIndex] = temp;}}
}
// C++代码
class SimpleSelectionSort {
public:static void selectionSort(int a[], int length) {for (int i = 0; i < length - 1; ++i) {// 遍历序列int minIndex = i;// 记录最小元素位置// 遍历无序序列寻找最小元素for (int j = i + 1; j < length; ++j) {if (a[j] < a[minIndex]) {// 更新最小元素下标minIndex = j;}}// 将最小值放到已排序序列的末尾int temp = a[i];a[i] = a[minIndex];a[minIndex] = temp;}}
};

算法优化:

  上面代码一次遍历只是找出未排序序列中的最小值,其实我们可以在遍历过程中同时找出最小值和最大值,并把每次找出的最大值按顺序放到每次排列数据的末尾。时间复杂度还是 O(N^2) ,只相对前面的减少了一半遍历次数。

// Java代码
class SimpleSelectionSort {public static void selectionSort(int[] a) {int left = 0;// 标记未排序序列左边界int right = a.length - 1;// 标记未排序序列右边界while (left < right) {// 遍历未排序序列int minIndex = left;// 记录最小元素位置int maxIndex = left;// 记录最大元素位置// 遍历无序序列寻找最小元素for (int i = left + 1; i <= right; ++i) {if (a[i] < a[minIndex]) {// 更新最小元素下标minIndex = i;}if (a[i] > a[maxIndex]) {// 更新最大元素下标maxIndex = i;}}// 将最小值放到已排序序列的左末尾int temp = a[left];a[left] = a[minIndex];a[minIndex] = temp;if (maxIndex == left) {// 处理最大值为a[left]的特殊情况maxIndex = minIndex;}// 将最大小值放到已排序序列的右末尾temp = a[right];a[right] = a[maxIndex];a[maxIndex] = temp;++left;// 修改未排序序列范围--right;}}
}
// C++代码
class SimpleSelectionSort {
public:static void selectionSort(int a[], int length) {int left = 0;// 标记未排序序列左边界int right = length - 1;// 标记未排序序列右边界while (left < right) {// 遍历未排序序列int minIndex = left;// 记录最小元素位置int maxIndex = left;// 记录最大元素位置// 遍历无序序列寻找最小元素for (int i = left + 1; i <= right; ++i) {if (a[i] < a[minIndex]) {// 更新最小元素下标minIndex = i;}if (a[i] > a[maxIndex]) {// 更新最大元素下标maxIndex = i;}}// 将最小值放到已排序序列的左末尾int temp = a[left];a[left] = a[minIndex];a[minIndex] = temp;if (maxIndex == left) {// 处理最大值为a[left]的特殊情况maxIndex = minIndex;}// 将最大小值放到已排序序列的右末尾temp = a[right];a[right] = a[maxIndex];a[maxIndex] = temp;++left;// 修改未排序序列范围--right;}}
};

简单选择排序(Simple Selection Sort)相关推荐

  1. 选择排序(Selection sort)是一种简单直观的排序算法

    选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大 ...

  2. 数据结构 - 树形选择排序 (tree selection sort) 具体解释 及 代码(C++)

    树形选择排序 (tree selection sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 算法逻辑: 依据节点的大小, ...

  3. java最全基础知识_Java编程入门,选择排序(Selection Sort)怎么做?

    表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.理论上讲,选择排序可能也是平时排序一般人想到的 ...

  4. 算法:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)和选择排序(Selection Sort)总结...

    背景 这两天温习了 5 中排序算法,之前也都看过它们的实现,因为没有深入分析的缘故,一直记不住谁是谁,本文就记录一下我学习的一些心得. 三种排序算法可以总结为如下: 都将数组分为已排序部分和未排序部分 ...

  5. 选择排序(Selection Sort)

    表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.理论上讲,选择排序可能也是平时排序一般人想到的 ...

  6. 数据结构:选择排序(Selection sort)

    package com.sortbasic;import java.util.Random;public class SelectionSortGenerate {// 数组private stati ...

  7. 排序——选择排序(Selection sort)

    算法思想 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾.以此类推,直到全部待排序的数据元素的 ...

  8. [转载] python选择排序二元选择_选择排序:简单选择排序(Simple Selection Sort)

    参考链接: Python中选择排序Selection Sort 基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的 ...

  9. c语言用sort函数选择排序,简单选择排序(Simple Selection Sort)的C语言实现

    简单选择排序(Simple Selection Sort)的核心思想是每次选择无序序列最小的数放在有序序列最后 演示实例: C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 原创文章, ...

最新文章

  1. Java常用的集合类
  2. NOIP2007 树网的核 [BZOJ2282][Sdoi2011]消防
  3. 专题目录20211013-ongoing
  4. Oracle日期转换处理
  5. Highcharts X轴名称太长,如何设置下面这种样式
  6. 13 Oracle数据库开发与设计入门篇
  7. linux进程源码分析,Linux内核源代码分析——口述程序猿如何意淫进程(一)
  8. antd新增一行页码不正确_antd-Table@4.x对rowKey属性的重构
  9. linux配置caffe环境,ubuntu14.04环境下配置caffe
  10. SQLSERVER中的BCP命令使用
  11. JS之形参带默认值的写法代码
  12. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_01-页面静态化需求分析
  13. 对路径的访问被拒绝怎么办_工作组计算机无法访问,教您无法访问工作组计算机的解决技巧...
  14. 软考-计算机系统知识整理
  15. AUTOCAD——Excel表格导入CAD、CAD合并两兄弟
  16. 涠洲岛形成及地形地貌特征
  17. c语言ans作用,C语言的递归思想实例分析
  18. 海尔简爱s11怎么进入bios_海尔简爱s11系统应用商店没有登录界面怎么办?
  19. 今日只为你狂欢-----JAVA线程总结(零基础入门)
  20. 记录python开发第一个app,实现word转html的桌面应用

热门文章

  1. html 如何去滚动条,css怎么去除滚动条?
  2. 有趣的第一人称和第三人称游戏
  3. 延时加载全局的js和css
  4. C语言结构体指针数组小结
  5. AD数模转化AD0809
  6. ICLR 2023 | 初探AI拼图模型预测蛋白质复合物结构
  7. 兄弟连NoSQL视频教程 redis笔记
  8. 九章算法高频算法题 题解
  9. 项目管理,用SAP还是8thManage?
  10. 42岁女博士相亲,要求对方年薪三百万,主要为淘汰一类档次低男人