A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

选择排序
选择排序(Selection        sort)是⼀种简单直观的排序算法。它的⼯作原理如 下。⾸先在未排序序列中找到最⼩(⼤)元素,存放到排序序列的起始位 置,然后,再从剩余未排序元素中继续寻找最⼩(⼤)元素,然后放到已排 序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置 上,则它不会被移动。选择排序每次交换⼀对元素,它们当中⾄少有⼀个将 被移到其最终位置上,因此对n个元素的表进⾏排序总共进⾏⾄多n-1次交 换。在所有的完全依靠交换去移动元素的排序⽅法中,选择排序属于⾮常好 的⼀种。
选择排序分析
排序过程:


[AppleScript] 纯文本查看 复制代码
def	selection_sort(alist):				n	=	len(alist)				#	需要进⾏n-1次选择操作				for	i	in	range(n-1):								#	记录最⼩位置								min_index	=	i								#	从i+1位置到末尾选择出最⼩数据								for	j	in	range(i+1,	n):												if	alist[j]	<	alist[min_index]:																min_index	=	j								#	如果选择出的数据不在正确位置,进⾏交换								if	min_index	!=	i:												alist[i],	alist[min_index]	=	alist[min_index],	al ist[i]
alist	=	[54,226,93,17,77,31,44,55,20]
selection_sort(alist) print(alist)

时间复杂度
最优时间复杂度:O(n ) 最坏时间复杂度:O(n ) 稳定性:不稳定(考虑升序每次选择最⼤的情况)
选择排序演示


插⼊排序
插⼊排序(英语:Insertion        Sort)是⼀种简单直观的排序算法。它的⼯作原 理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描, 找到相应位置并插⼊。插⼊排序在实现上,在从后向前扫描过程中,需要反 复把已排序元素逐步向后挪位,为最新元素提供插⼊空间。
插⼊排序分析


[AppleScript] 纯文本查看 复制代码
def	insert_sort(alist):				#	从第⼆个位置,即下标为1的元素开始向前插⼊				for	i	in	range(1,	len(alist)):								#	从第i个元素开始向前⽐较,如果⼩于前⼀个元素,交换位置								for	j	in	range(i,	0,	-1):												if	alist[j]	<	alist[j-1]:
			alist[j],	alist[j-1]	=	alist[j-1],	alist[j]
alist	=	[54,26,93,17,77,31,44,55,20] insert_sort(alist) print(alist)

时间复杂度
最优时间复杂度:O(n)        (升序排列,序列已经处于升序状态) 最坏时间复杂度:O(n ) 稳定性:稳定
插⼊排序演示



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马