1. 选择排序思想

(1.1)选择排序的基本思想是:每一趟(例如第i趟)在后面n-i+1(i=1,2, ... , n)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下1个,就不用再选了。选择排序中的堆排序算法是重点内容。

2. 简单选择排序的思想

(2.1)从上面选择排序的思想中可以很直观第得出简单选择排序算法的思想:假设排序表为L[1 ... n], 第i趟排序即从L[i ... n]中选择关键字最小的元素与L[i] 交换,每一趟排序可以确定一个元素的最终位置,这样经过n-1趟排序就可以使得整个待排序表有序。

3. 简单选择排序代码实现

 1 package cn.sun.it.review;2 3 import java.util.Arrays;4 import java.util.Scanner;5 6 public class SelectSort {7 8     public static void main(String[] args) {9         System.out.println("请输入若干个整数,以逗号分隔:");
10         Scanner sc = new Scanner(System.in);
11         String strNums = sc.nextLine();
12         String[] tempArrNums = strNums.split(",");
13         int[] arr = new int[tempArrNums.length];
14         for (int i = 0; i < arr.length; i++) {
15             arr[i] = Integer.valueOf(tempArrNums[i]);
16         }
17         System.out.println("排序前:" + Arrays.toString(arr));
18         selectSort_v1(arr);
19         System.out.println("排序后:" + Arrays.toString(arr));
20     }
21
22     private static void selectSort_v1(int[] arr) {
23         int min;
24         int temp;
25         for(int i=0;i<arr.length-1;i++){ // 一共进行n-1趟排序
26             min = i; // 记录最小元素的位置
27             for(int j=i+1;j<arr.length;j++){ // 在arr[i...n-1]中选择最小的元素
28                 if(arr[j]<arr[min]){
29                     min = j; // 更新最小元素的位置
30                 }
31             }
32             if(min != i){ // 与第i个位置进行交换
33                 temp = arr[i];
34                 arr[i] = arr[min];
35                 arr[min] = temp;
36             }
37         }
38     }
39
40 }

4. 测试结果

5. 性能分析

(5.1)空间效率:仅使用常数个辅助单元,故而空间效率为O(1);

(5.2)时间效率:从上述代码中可以看出,在简单选择排序过程中,元素移动的操作次数很少,不会超过3(n-1)次,最好的情况是移动0次,此时对应的表已经有序;但元素间比较的次数与序列的初始状态无关,始终是n(n-1)/2次,所以时间复杂度始终是O(n2)

(5.3)稳定性:在第i趟找到最小的元素后,和第i个元素交换,可能会导致第i个元素与其含有相同关键字元素的相对位置发生改变。例如,表L={2,2,1},经过一趟排序后,

L={1,2,2},最终排序序列也是L={1,2,2},显然,2与2 的相对次序已经发生了变化,因此,简单选择排序是一个不稳定第排序方法。

本文首发于java黑洞网,csdn同步更新

选择排序:简单选择排序相关推荐

  1. 选择排序—简单选择排序(Simple Selection Sort)

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

  2. C语言实现选择排序——简单选择排序算法

    C语言实现简单选择排序 文章目录 C语言实现简单选择排序 简单选择排序算法 1.交换操作 2.简单选择排序算法实现 项目完整代码 运行效果图 简单选择排序算法 1.交换操作 //交换实现 void s ...

  3. C++实现各种选择排序(简单选择排序,堆排序)

    简单选择排序: 代码如下: #include <iostream> using namespace std;void SelectSort(int *a, int len) {//数组下标 ...

  4. 20180321选择排序-简单选择排序

    2019独角兽企业重金招聘Python工程师标准>>> 前置知识 selection sort 选择排序的基本思想:从待排序的序列中选出最大值(最小值),交换该元素与待排序序列头部元 ...

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

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

  6. 选择排序-简单选择排序

    简单选择排序是一种不稳定的选择排序. #include<stdio.h> void selectSeletSort(int a[],int n) {     int i,j,k;     ...

  7. 排序-------简单选择实现(Java实现)

    一.算法思想 第一趟简单选择排序时,从第一个记录开始,通过n-1次关键字的比较,从 n 个记录中选出关键字 最小的 记录,并和 第一个记录 进行交换. 第二趟简单选择排序时,从第二个记录开始,通过 n ...

  8. DS排序--简单选择排序

    题目描述 给出一个数据序列,使用简单选择排序算法进行升序排序 输入 第一行输入t,表示有t个测试示例 第二行输入n,表示第一个示例有n个数据(n>1) 第三行输入n个数据,都是正整数,数据之间用 ...

  9. 七种排序------简单选择排序(Simple Selection Sort)

    简单选择排序法就是通过 n - i 次关键字间的比较,从 n - i + 1个记录中选出关键字最小的记录,并和第 i 个记录交换. 代码如下: void SelectSort(SqList *L) { ...

  10. 数据结构/排序/选择排序/简单选择排序

    原理 介绍: 原理:每趟排序记录最小记录的索引后交换 类比:猴子搬苞谷,喜欢更大的苞谷.猴子经过1排苞谷,每经过1个苞谷就与心中的苞谷对比,更大就记录当前苞谷的位置,走完这一排苞谷,心中的那个苞谷就是 ...

最新文章

  1. 【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 写出或更新配置文件 | 读取配置文件 )
  2. linux 进程映射空间 libc,为什么不能在64位内核的32位Linux进程中映射(MAP_FIXED)最高虚拟页面?...
  3. oracle vm 环境支持,使用 Oracle VM 模板快速部署 Oracle RAC 环境
  4. 最新版FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用简介
  5. 大数据学习笔记41:Hive - 用户自定义函数
  6. java 正则表达式 数量
  7. shell 脚本编程总结
  8. docker-compose学习
  9. 通用数据库连接工具--DbVisualizer的使用
  10. 【老生谈算法】matlab实现信息光学夫琅禾费衍射源码——夫琅禾费衍射
  11. matlab实现Sobel边缘检测
  12. 道路施工安全智能预警
  13. 重写规则(Rewrite Rules)在IIS和Linux服务器的配置区别
  14. Vulnhub-Moneybox
  15. error: The folder you are executing pip from can no longer be found.
  16. win7系统不显示图片的缩略图的终极解决方法
  17. html网页生成动态地图
  18. 客户端timewait
  19. 初始化Weex项目遇到的问题记录
  20. 滴滴实时计算平台在运营监控方面的应用

热门文章

  1. linux下如何安装自带编译器的codeblocks,codeblocks安装(自带gcc编译器)
  2. HBase之Region上Spilt流程分析
  3. TopicDeletionManager分析
  4. (5)vivado不能生成bit文件(学无止境)
  5. (21)FPGA移位寄存器设计(第5天)
  6. FPGA复位方法总结
  7. python计算机图形学_图形图像学习随笔:计算机图形学的一些基本概念
  8. 12006.eeprom之M24C02
  9. 1006.复制打开他人的clion工程错误
  10. 于掌控板实现简单的抢答器系统