知识总览:
简单选择排序:
从还没排序的元素的位置从左到右一趟趟找,每次都找值最小的,然后和当前待排的第一个元素交换位置,直到剩下最后一个元素,每排序一个元素下一趟就不再找该元素了,从下一个元素开始排序
第一趟从左往右扫描找到值最小的元素13,把13和最前边位置的元素49交换如图2,
在第2趟排序中,找除了第一个已经排序好的元素外,从剩下待排元素中从左到右找到选择值最小的元素27和第2个元素38的位置交换
在第3趟排序,上同,找除了前2个剩余没排序的元素,从左到右找到值最小的38和第3个元素位置65交换
在第4趟排序,上同,找除了前3个剩余没排序的元素,从左到右找到值最小的49和第4个元素位置97交换,因为有2个49,但是优先选择先找到的49和97交换
在第5趟排序,上同,找除了前4个剩余没排序的元素,从左到右找到值最小的另一个49和第5个元素位置76交换
在第6趟排序,上同,找除了前5个剩余没排序的元素,从左到右找到值最小的65和第6个元素位置97交换
在第7趟排序,上同,找除了前6个剩余没排序的元素,从左到右找到值最小的76和第7个元素位置97交换,
最后一趟只剩下一个待排元素,肯定是最大的元素,不需要再处理了,至此结束
因此,n个元素,最后一个元素不用处理,则只需n-1趟处理
代码实现:
n个元素,要进行n-1趟排序,i从0开始,则要i< n-1进行n-1趟循环,用min变量记录最小元素位置,双层for循环,第一层记录本趟排序从i位置开始,第2层记录本趟循环最小元素位置,第2层for循环遍历完后如果min元素和开始排序的元素不相等,则交换开始排序i位置的元素和最小元素位置
算法性能分析:
空间复杂度:O(1),只需记录几个IBA能量就可以让排序顺序执行
时间复杂度:跟有序、无序、逆序没关系,不管什么顺序都要进行n-1趟排序,每进行一趟排序都要两两关键字对比,第一趟n个元素需要比较n-1次,第二趟n-1个元素待排需要比较n-2次,依次类推,直到排序结束,需要比较的关键字次数总和为n(n-1)/2即时间复杂度为O(n²)
元素交换次数<n-1次(为啥是小于,不是等于吗。。。)
算法不稳定:如下,第一趟选值最小的1和第一个元素交换,不带下划线的2跑到了带下划线2的后边,第2趟比较俩2相等不交换位置,则排序之后俩值相同的元素2已经改变了位置
简单选择排序即可适用于顺序表,又可适用于链表(适用于链表的话听说每遍历一次把元素值最小的放在链头或链尾)
知识回顾:
又水一篇。。。。。。。。。