\ue50a千次阅读　\ue50b\ue50a2020-05-08　18:52:59　\ue50b排序　算法之　冒泡　排序　及性能优化(　时间复杂度　+空间复杂度分析)　简单选择排序　基本思想:比较+交换　1.　从待　排序　序列中,找到关键字最小的元素;　2.　如果最小元素不是待　排序　序列的第一个元素,将其和第一个元素互换;...　简单选择排序　基本思想:比较+交换　1.　从待排序序列中,找到关键字最小的元素;　2.　如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;　3.　从余下的　N　-　1　个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。　因此我们可以发现,简单选择排序也是通过两层循环实现。　第一层循环:依次遍历序列当中的每一个元素　第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。　排序算法实现　int　i　,　j　,　k,temp　;　for　(　i　=　0　;　i　<　n　-　1　;　i　++　)　//依次遍历序列中每一个元素,进行n-1轮,最后一轮只剩下最后一个元素　{　k　=　i　;　//默认该轮的第一个元素是最小值　for　(　j　=　i　+　1　;　j　<　n　;　j　++　)　//遍历其余元素　{　if　(　arr　[　j　]　<　arr　[　k　]　)　//若其余元素有比该轮第一个元素小的,则记录元素下标　k　=　j　;　//记录元素下标　}　if　(　k　!=　i　)　//进行交换　{　temp　=　arr　[　k　]　;　arr　[　k　]　=　arr　[　i　]　;　arr　[　i　]　=　temp　;　}　}　简单选择排序时间复杂度分析　此排序的最大特点就是　交换移动数据次数相当少,节约了相应的时间　无论最好还是最坏情况,其比较次数都是一样多的,共需要比较　(n-1)+　(n-2)+…+　2　+　1　=　n　*　(n-1)/2次;　而对交换次数而言,当最好的时候,交换0次,最差时,交换n-1次;　基于最终的排序时间是比较和交换次数总和,因此,　总的时间复杂度依然为O(n^2),但性能优于冒泡排序　。　排序　大体分为两类:比较　排序　和非比较　排序　一　各个　排序　的基本实现1.直接插入　排序　和希尔　排序　//整体思路:往一段有序区间插入元素,end标记为有序区间的最后一个元素下标,要插入的元素下标为en