题目:
给定一个无序链表的头节点head,实现单链表的选择排序。
要求:空间复杂度O(1)。
基本思路
选择排序的过程是从未排序的部分中找到最小值,然后放在已经排好序部分的尾部,逐渐将未排序的部分缩小,最后全部变成排好序的部分。时间复杂度O(N2)
class node:
def __init__(self,value):
self.value = value
self.next = None
def getSmallestPre(head):
if head == None:
return
smallPre,small,pre,cur = None,head,head,head.next
while cur!=None:
if cur.value < small.value:
smallPre = pre
small = cur
pre = cur
cur = cur.next
return smallPre
def selectSort(head):
tail,cur,smallPre,small = None,head,None,None
while cur!=None:
small = cur
smallPre = getSmallestPre(small)
if smallPre !=None:
small = smallPre.next
smallPre.next = small.next
if cur == small:
cur = cur.next
else:
cur = cur
if tail == None:
head = small
else:
tail.next = small
tail = small
return head