1、原理:每次从待排序的数据元素中选出最小(或者最大)的一个元素,存放在已排好序列的起始位置(或者末尾位置),直到全部待排序的数据元素排完。

2、思路:

  (1)第一趟排序:在待排序数据arr[1],arr[2]...arr[n]中选出最小的数据,将其与arr[1]进行交换。

  (2)第二趟排序:在待排序的arr[2],arr[3].....arr[n]中选出最小的元素与arr[2]进行交换;

  。。。。。。。

  (3)如此继续。第i趟在待排序数据arr[i],arr[i+1]....arr[n]中选出最小的元素与arr[i]进行交换,直至全部完成。

  

3、过程:

4、举例:

  (1)要排序数组:[42,20,17,13,28,14,23,15]

  (2)第一趟排序:[13,20,17,42,28,14,23,15]

    最小数据是13,将13放在首位,也即13和42位置进行交换

    排序结果为:[13,20,17,42,28,14,23,15]

  (3)第二趟排序:

    对[20,17,42,28,14,23,15]进行比较,14最小,14和20交换

    排序结果为:[13,14,17,42,28,20,23,15]

  (4)第三趟排序

    对[17,42,28,20,23,15]进行比较,15最小,15和17交换

    排序结果为: [13,14,15,42,28,20,23,17]

  (5)第四趟排序

    对[42,28,20,23,17]进行比较,17最小,17和42交换

    排序结果为:[13,14,15,17,28,20,23,42]

  (6)第五趟排序

    对[28,20,23,42]进行比较,20最小,20和28交换

    排序结果为:[13,14,15,17,20,28,23,42]

  (7)第六躺排序

    对[28,23,42]进行比较,28最小,不需要交换

    排序结果为:[13,14,15,17,20,28,23,42]

  (8)第七趟排序

    对[23,42]进行比较,23最小,不需要交换

    排序结果为:[13,14,15,17,20,28,23,42]

平均时间复杂度:O(n2)

5、Java代码实现:

/**
* 选择排序
*
* @author Administrator
*
*/
public class SelectionSort { /*
* 基本思想: 在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换; 第二次遍历n-2个数,找到最小的数值与第二个元素交换;
* 。。。 第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。
*
* 选择排序 平均时间复杂度:O(n2)
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[] { 42, 20, 17, 13, 28, 14, 23, };
selectionSort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
} private static void selectionSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
} if (minIndex != i) {
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp; }
}
} }

选择排序——Selection Sort的更多相关文章

  1. 排序算法 - 选择排序(selection sort)

    选择排序(Selection sort)跟插入排序一样,也是O(n^2)的复杂度,这个排序方式也可以用我们的扑克牌来解释. 概念 桌面上有一堆牌,也是杂乱无章的,现在我们想将牌由小到大排序,如果使用选 ...

  2. 简单选择排序 Selection Sort 和树形选择排序 Tree Selection Sort

    选择排序 Selection Sort 选择排序的基本思想是:每一趟在剩余未排序的若干记录中选取关键字最小的(也可以是最大的,本文中均考虑排升序)记录作为有序序列中下一个记录. 如第i趟选择排序就是在 ...

  3. 排序算法--选择排序(Selection Sort)_C#程序实现

    排序算法--选择排序(Selection Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来 ...

  4. 选择排序 Selection Sort

    选择排序 Selection Sort 1)在数组中找最小的数与第一个位置上的数交换: 2)找第二小的数与第二个位置上的数交换: 3)以此类推 template<typename T> / ...

  5. 跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort)

    跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort) 选择排序(selection sort) 算法原理:有一筐苹果,先挑出最大的一个放在最后,然后 ...

  6. [算法] 选择排序 Selection sort

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

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

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

  8. 排序--选择排序Selection Sort Java实现

    基本原理 选择排序的简单原理:选择排序算法通过从未排序部分重复查找最小元素(考虑升序)并将其放在开头来对数组进行排序. 将数组两个子数组: 已排序子数组 未排序子数组 选择排序中每次循环都会从未排序子 ...

  9. 选择排序Selection sort

    顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来, 顺序放入新数组,直到全部拿完 再简单点,对着一群数组说,你们谁最小出列,站到最后边 然后继续对剩余的无序数组说 ...

随机推荐

  1. java_22 Map接口

    1Map Collection是孤立存在的,向集合中存储元素是一个一个放进去的 Map中的集合存储是成对的,可以通过键找到值.即将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值 ...

  2. TUN/TAP编程实现

    其实关于这两种设备的编程,基本上属于八股文,大家一般都这么干. 启动设备之前 有的linux 并没有将tun 模块编译到内核之中,所以,我们要做的第一件事情就是检查我们的系统是否支持 TUN/TAP ...

  3. iOS 拨打电话三种方式

    ,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 NSMutableString * str=[[NSMutableString alloc] initWithFo ...

  4. mysql sql_mode=only_full_group_by错误解析

    实测,解决问题; 1.错误提示: 2.检查参数设置: 3.mysql的配置文件my.cnf里面可以修改, 但是,改完以后,你检查所有的参数设置都是对的,就是运行不了.怎么办?怎么办? 4.如果还是不行 ...

  5. 201621123002《JAVA程序设计》第五周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口 interface关键字 implements关键字 Comparable abstract Comparator 1.2 ...

  6. Oracle 忘记sys与system管理员密码重置操作

    首先打开cmd 执行 orapwd file=C:\app\PWDorcl.ora password=orclorcl C:\app\PWDorcl.ora是你要存放的路径文件 Password=or ...

  7. tomcat源码分析-初始化过程

    digester 说明: https://www.cnblogs.com/devilwind/p/8192304.html

  8. windbg 经典死锁调试

    代码 // Deadlock_Debug.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "windows.h& ...

  9. python中None与0、Null、false区别

    None是Python中的一个关键字,None本身也是个一个数据类型,而这个数据类型就是None,它可0.空字符串以及false均不一样,这些都只是对象,而None也是一个类. 给个bool测试: v ...

  10. P3258 [JLOI2014]松鼠的新家 (简单的点差分)

    https://www.luogu.org/problemnew/show/P3258 注意开始和最后结尾 #include <bits/stdc++.h> #define read re ...