基本思想:

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

简单选择排序的示例:

操作方法:

第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换

第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换

以此类推.....

第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与第i 个记录交换,

直到整个序列按关键码有序。

算法实现:

  
void print(int a[], int n ,int i){cout<<"第"<<i+1 <<"趟 : ";for(int j= 0; j<8; j++){cout<<a[j] <<"  ";}cout<<endl;
}
/*** 数组的最小值** @return int 数组的键值*/
int SelectMinKey(int a[], int n, int i)
{int k = i;for(int j=i+1 ;j< n; ++j) {if(a[k] > a[j]) k = j;}return k;
}/*** 选择排序**/
void selectSort(int a[], int n){int key, tmp;for(int i = 0; i< n; ++i) {key = SelectMinKey(a, n,i);           //选择最小的元素   递归if(key != i){tmp = a[i];  a[i] = a[key]; a[key] = tmp; //最小元素与第i位置元素互换}print(a,  n , i);}
}
int main(){int a[8] = {3,1,5,7,2,4,9,6};cout<<"初始值:";for(int j= 0; j<8; j++){cout<<a[j] <<"  ";}cout<<endl<<endl;selectSort(a, 8);print(a,8,8);
}

简单选择排序的改进——二元选择排序

简单选择排序,每趟循环只能确定一个元素排序后的定位。我们可以考虑改进为每趟循环确定两个元素(当前趟最大和最小记录)的位置,从而减少排序所需的循环次数。改进后对n个数据进行排序,最多只需进行[n/2]趟循环即可。具体实现如下

void SelectSort(int r[],int n) {
02.    int i ,j , min ,max, tmp;
03.    for (i=1 ;i <= n/2;i++) {
04.        // 做不超过n/2趟选择排序
05.        min = i; max = i ; //分别记录最大和最小关键字记录位置
06.        for (j= i+1; j<= n-i; j++) {
07.            if (r[j] > r[max]) {
08.                max = j ; continue ;   //continue不可少,否则可能会漏掉一些数据,min的值偏大
09.            }
10.            if (r[j]< r[min]) {
11.                min = j ;
12.            }
13.      }
14.      //该交换操作还可分情况讨论以提高效率
15.      tmp = r[i-1]; r[i-1] = r[min]; r[min] = tmp;
16.      tmp = r[n-i]; r[n-i] = r[max]; r[max] = tmp;
17.
18.    }
19.}

  

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

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

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

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

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

  3. 经典排序算法(一) —— Selection Sort 选择排序

    经典排序算法(一) -- Selection Sort 选择排序 文章目录 经典排序算法(一) -- Selection Sort 选择排序 简介 排序过程 实现 复杂度 简介 选择排序是一种简单直观 ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. UA OPTI570 量子力学22 2-D Isotropic Q.H.O.简介
  2. python中统计计数的几种方法
  3. Linux+.NetCore+Nginx搭建集群
  4. 分享一套非常不错的bootstarp3.0.2响应式模板
  5. 作者:朱扬勇,复旦大学计算机科学技术学院教授、学术委员会主任,上海市数据科学重点实验室主任。...
  6. java 文件中查找指定的单词,查找指定文本文件中的单词数的Java程序
  7. 第二阶段冲刺第六天站立会议
  8. Silvaco 学习笔记——物理模型:载流子产生复合模型
  9. secureCRT 7.3.6 winxp版本
  10. Nginx报错:nginx: [error] invalid PID number in /run/nginx.pid的解决方案
  11. Right-BICEP测试四则运算2
  12. CSS calc() 使用指南
  13. Mac Catalina系统关闭/打开开机duang音效
  14. excel怎么按照年月日时分秒的格式以每隔一个小时进行填充序列
  15. QTextEdit 控件的妙用(以及与QPlainTextEdit的区别)
  16. linux php7.4,PHP 7.4登陆Ubuntu 20.04 LTS
  17. linux下jdk的安装与配置jdk-6u45-linux-i586.bin
  18. QT_地图导航 源码下载
  19. 第一篇 厚黑学 一、绪论
  20. No package ‘vips‘ found系列问题解决方案

热门文章

  1. [C++]Call virtual member function in constructor or destructor
  2. Flash与数学:球体曲面 (2)
  3. 满有趣的屏幕快捷键;)
  4. 转 Java的各种打包方式(JAR/WAR/EAR/CAR)
  5. 【Android】RxJava的使用(一)基本用法
  6. 《告别失控:软件开发团队管理必读》一一第1章 程序员为何难以管理
  7. 避免每个类中都初始化日志类
  8. #pragma execution_character_set的意义
  9. 通过rsync实现数据备份
  10. Nexus如何上传自己的jar包 (upload artifactory)