【排序】选择排序算法

特别说明

对于算法,重在理解其思想、解决问题的方法,思路。因此,以下内容全都假定待排序序列的存储结构为:顺序存储结构。

选择排序思想

选择排序又称为简单选择排序,主要思想描述如下:

01.假设待排序列表为 。选择排序将  划分为由已排序好序的  部分 以及 未排序的  部分;

注意:刚开始时  部分其实可认为只有一个元素,即: 元素

02.每次从  部分中选出最小(或最大)的那个元素,将其放在  的末尾位置;

03.重复02步骤,直到  部分为空为止;

编码参考

简单选择排序是非常简单的一种排序算法。其编码参考如下:

 1 //
 2 // summary     : 选择排序
 3 // in param    : seqlist 待排序列表.同时也是排完序列表.
 4 // in param    : nLen 列表长度
 5 // out param   : --
 6 // return      : --
 7 // !!!note       : 01.以下实现均假设一切输入数据都合法.即:内部不对参数全法性进行校验,默认它们全都合法有效.
 8 //               02.排序开始前 seqlist 是无序的,排序结束后 seqlist 是有序的.
 9 void select_sort(int seqlist[/*nLen*/], const int nLen) {
10     if (nLen <= 1) {
11         return;// only one element.
12     }
13     auto nInnerIdx = 0;
14     auto nMinIdx   = 0;
15     auto nTemp     = 0;
16     for (auto nOuterIdx = 0, nInnerIdx = 0; nOuterIdx < nLen - 1; ++nOuterIdx) {
17         nInnerIdx = nOuterIdx;
18         nMinIdx   = nInnerIdx;
19         while (++nInnerIdx < nLen) {
20             if (seqlist[nInnerIdx] < seqlist[nMinIdx]) {
21                 nMinIdx = nInnerIdx;
22             }
23         }
24         if (nMinIdx != nOuterIdx) {
25             nTemp              = seqlist[nOuterIdx];
26             seqlist[nOuterIdx] = seqlist[nMinIdx];
27             seqlist[nMinIdx]   = nTemp;
28         }
29     }
30 }

简单选择排序算法编码参考

算法分析

简单选择排序算法时间复杂度与插入排序算法、冒泡排序算法一样,都是  。辅助空间也一样,也是 。但相比插入排序与冒泡排序,选择排序的数据移动操作倒没那么频繁(因为在确定未排序部分的最小(或最大)元素时,我们不需要执行移动操作,只需要用下游标标记即可)。

时间: 2024-09-29 23:30:38

【排序】选择排序算法的相关文章

算法大神之路----排序(选择排序法)

选择排序法,顾名思义,就是把特定的数据选择出来进行排序. 选择排序法有两种方式 在所有的数据中,当由大到小排序,那么就将最大值放到第一个位置 如果由小到大排序,那么就将最小值放到第一个位置 以由小到大排序举例,当排序时候,扫描整个数据,拿第一个依次与其他做比较,如果其他数据比第一个大,或者相等,那么就不交换,如果其他数据比第一个数小,那么就交换二者的位置,扫描结束后,则从第二个数开始,依次扫描. 方法分析 无论是最坏还是最好情况,甚至是平均情况下,都需要对全部数据进行扫描,找到最大或最小值,因此

01. Java的经典排序--选择排序--冒泡排序--折半查找(二分查找)

Java的经典排序--选择排序--冒泡排序--折半查找 选择排序 选择排序 3 2 1 5 8 0 1 3 2 5 8 1 1 2 3 5 8 2 1 2 3 5 8 3 1 2 3 5 8 public static void main(String[] args) { int[] arr={3,2,1,5,8}; selectSort(arr); for(int i = 0 ; i < arr.length ; i ++){ System.out.println(arr[i]) ; } }

数据结构——排序——选择排序算法

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换.在所有的完全依靠交换去移动元素的排序方

数据结构排序-选择排序

选择排序中的两个经典算法:简单选择排序,堆排序. 简单选排:通过n-1次数据元素的比较,从n-i+1个记录中选择最小的数据,并与第i个数据进行交换,它的时间复杂度是O(n^2). 堆排序:利用堆的特征进行排序,复杂度为O(n*logn). 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int n; 5 6 /* 7 * 选择排序 8 */ 9 void SelectSort(int *array) 10 { 11 int i, j,

排序 选择排序&amp;&amp;堆排序

选择排序&&堆排序 1.选择排序: 介绍:选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 步骤:假设数组array长度为N即有数组内有N个数据未排序数据 1.第一趟遍历将这N个数据中最小的数据和array[0]交换. 2.第二趟则遍历N-1个数据,将这N-1个数据中最小的和arra

C-冒泡排序,选择排序,数组

——构造类型 ->数组 ->一维数组 ->相同类型的一组数据 ->类型修饰符--数组名—[数组的元素个数(必须是整型表达式或者是整型常量,不能是变量)] {初始化} int arr[3] = {1,2,3}; arr[1] = 5; printf("%d",arr[1]); ->数组内存的值为变量 ->使用数组的时候中括号内可以是变量 ->sizeof()是一个运算符,不是一个函数,可以计算变量或者变量修饰符占了多少个字节,也可以对数组进行计算

排序——选择排序、快速排序

知识点总结报告 知识点: 选择排序 (原理)基本思想:第i趟排序开始时,当前有序区和无序区分别为R[0...i-1]和R[i..n-1](0<=i<n-1),该趟排序是从当前无序区中选出关键字最小的元素R[k],将它与无序区的第一个元素R[i]交换,使R[0..i]和R[i+1..n-1]分别变为新的有序区和新的无序区. 因为每趟排序均使有序区中增加了一个元素,且有序区中元素的关键字均不大于无序区中元素的关键字,即第i趟排序之后R[0..i]的所有关键字均小于等于R[i+1..n-1]中的所有

内部排序-&gt;选择排序-&gt;树形选择排序

文字描述 树形选择排序又称锦标赛排序; 比如,在8个运动员中决出前3名至多需要11场比赛, 而不是7+6+5=18场比赛(它的前提是甲胜乙,乙胜丙,则甲必能胜丙) 首先对n个记录的关键字进行两两比较,然后在(n/2)个较小者之间再进行两两比较,直至选出最小关键字的记录为止,这个过程可用一颗有n个叶子结点的完全二叉树表示.关于完全二叉树的定义和与本排序算法用到的性质见附录1 示意图 算法分析 由于含n个叶子结点的完全二叉树的深度为[log2n]+1, 则在树形选择排序中,除了最小关键字外,每选择一

排序——选择排序(java描述)

百度百科的描述如下:选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法. public class Sorting { public static void main(String[] args) { int[] a = { 6, 2, 5, 3,

python 排序 选择排序

算法思想: 首先从序列中选择一个最值,将这个元素和序列的首地址上的元素交换,这样就完成了一个元素的排序,接下来,重复上述过程,不断的从剩下的序列中选取最值,然后添加到有序部分的末尾(注意,这种添加是通过和未排序序列的第一个元素交换来实现的. 选择排序每次交换一队元素,他们当中至少有一个元素被移动到了最终位置上,因此对n个元素排序最多需要n-1次排序,这也是选择排序最主要的优点,如果某个元素位于正确的位置上,那么他就不会被移动 在所有完全依靠交换去移动元素的排序算法当中,选择排序是非常好的一种 d