栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

常用排序-选择排序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

常用排序-选择排序

选择排序 概念:
	第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。(此为递增概念,递减排序的话就选择最大的元素)
例子
有一个无序数组Arr[7]=[5,4,3,6,2,1,0];
用选择排序进行排序:
  1. 找到Arr[0]~Arr[6]的最小值与Arr[0]交换位置, Arr = [0,5,4,3,6,2,1];
  2. 找到Arr[1]~Arr[6]的最小值与Arr[1]交换位置, Arr = [0,1,4,3,6,2,5];
  3. 找到Arr[2]~Arr[6]的最小值与Arr[2]交换位置, Arr = [0,1,2,3,6,4,5];
  4. 找到Arr[3]~Arr[6]的最小值与Arr[3]交换位置, Arr = [0,1,2,3,6,4,5];
  5. 找到Arr[4]~Arr[6]的最小值与Arr[4]交换位置, Arr = [0,1,2,3,4,6,5];
  6. 找到Arr[5]~Arr[6]的最小值与Arr[5]交换位置, Arr = [0,1,2,3,4,5,6];
  7. 找到Arr[6]~Arr[6]的最小值与Arr[6]交换位置, Arr = [0,1,2,3,4,5,6];
    以此内推,当数组长度为N时,用For循环排序就行.
时间复杂度

常数操作:每一轮都有(取n个值,比较n次,交换1次)n为操作的数组范围
长度为N的数组所进行的常数操作为num:
第一次交换:num1 = N-1*(取值+比较)+交换 = N-1+N-1+1 = 2N-1;
第二次交换:num2 = (N-2)(取值+比较)+交换 = N-2+N-2+1 = 2N-3;
第三次交换:num3 = (N-3)
(取值+比较)+交换 = N-3+N-3+1 = 2N-5;

第N-1次操作:num(N-1) = 1*(取值+比较)+交换 = 1+1+1 = 3;
将所有操作次数相加 = aN2+bN+c
为一个关于N的2次方程
所以时间复杂度 = O(N2)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/605387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号