排序算法(3)选择排序
排序算法(3)选择排序
原理:思想:两个变种(1)单侧选择:在一个无序数组中选择出每一轮中最大值(或最小值)元素,放到最前面或最后面(升序)(2)双向选择:在一个无序数组中选择出每一轮中最值元素,然后把这一轮中最前面的元素和min交换,最后面的元素和max交换;然后缩小范围(开始位置(begin++)++,最后位置(end–)--),重复上面步骤,最终得到有序序列(升序)。
代码实现:
单侧选择版:
void SelectSort1(int a[], int n)
{for (int i = 0; i < n; i++){int temp = i;for (int j = i+1; j < n; j++){if (a[temp] < a[j]) temp = j;//升序,改成 > 是降序}swap(a[i],a[temp]);}
}
双向选择版:
void SelectSort(int a[], int n)
{int begin = 0;int end = n - 1;while (begin < end){int min = begin, max = begin;for (int i = begin; i <= end; i++)//得出这一段里的最大值和最小值{if (a[min] > a[i])min = i;if (a[max] < a[i])max = i;}//最小值与begin交换,最大值与end交换,升序。反之,是降序swap(a[min], a[begin]);if (max == begin)//如果首元素恰好是最大的,则需要先把min 和 max的位置交换,再交换,否则经过两次交换,又回到原来的位置max = min;swap(a[max], a[end]);begin++;end--;}
}
排序算法(3)选择排序相关推荐
- 排序---初级排序算法(选择排序、插入排序和希尔排序)
写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera Algorithms Part1&2 本文 ...
- 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试
案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...
- 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析
排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...
- 堆排序算法c语言筛选法,【排序】排序算法之选择排序
排序算法之选择排序 罗朝辉(http://www.cppblog.com/kesalin) 转载请注明出处 排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行 ...
- 【排序算法】选择排序(Selection sort)
选择排序(Selection sort)是一种简单直观的排序算法. 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余未排序的元 ...
- Java经典排序算法:选择排序,动图演示排序过程
Java经典排序算法:选择排序,动图演示排序过程 示意动图: public class Main {public static void main(String[] args) {new Main() ...
- 【排序算法】选择排序(C语言)
[排序算法]-- 选择排序 目录 一.选择排序的原理 二.选择排序的代码实现 三.选择排序的优化 1. 优化思路 2. 排序优化后问题 3. 优化代码的实现 四.选择排序的效率 一.选择排序的原理 ...
- 选择排序算法流程图_常用排序算法之选择排序
前两天给大家分享了冒泡排序和插入排序(没关注的同学,可以关注后查看历史消息),今天继续给大家分享另一种常用的排序算法--选择排序. 选择排序 选择排序和插入排序很相似,也区分已排序区间和未排序区间,选 ...
- 排序算法之选择排序(简单选择排序、堆排序)
选择排序(简单选择排序.堆排序) 选择排序 简单选择排序 概念 算法实现 堆排序 概念 算法实现 后续 选择排序 选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列 ...
最新文章
- php SQLite mysql_PHP实现的sqlite数据库连接类
- 这是我见过最全面的Python装饰器详解!没有学不会这种说法
- zabbix db partition
- 大数据学习规划(新手入门)
- WORD列表缩进的文本起始点
- DevOps(过程、方法与系统的统称)是什么
- android的ui怎么做到流畅,android提高UI的流畅度
- 2017CCPC哈尔滨 F:Permutation(构造)
- 10.03今日暂时停更博客
- ununtu16.04+python3+selenium+firefox环境搭建
- 图像裁剪插件--cropper的基本使用
- 2016.11.03回顾 more excel交换两列
- RFBnet论文及其代码详解
- FPGA课设实验二:计数器设计与仿真
- 机器学习之回归与分类
- pycharm 2017.3破解方法
- 后台数据不清理android,android 后台被数据清理后切换到前台数据丢失问题
- grub4dos 启动ubuntu 12.04
- 机器人门禁控制盒怎么接线方法_门禁电锁如何接线
- 《Vue+Spring Boot前后端分离开发实战》专著累计发行上万册