市面上流行着这样一道面试题,说是需要10分钟写出来。如果没做过练习的,这道题还真没那么容易快速实现。在下拿Python通过50行代码实现一遍,以便各位不时之需。
1)step1:定义节点
class Node:
def __init__(self,val):
self.val=val #节点值
self.pre=None #上个节点指针
self.next=None #下个节点指针
2)step2:通过数组初始化双向链表
def initDoubleLinkedList(arr):
dummy=Node(-1) #定义临时头节点
cur=dummy
for item in arr:
add=Node(item)
cur.next=add
add.pre=cur
cur=cur.next
return dummy.next,cur #返回头节点和尾节点
3)step3:链表打印显示
def traverse(linked_list):
while linked_list:
print(linked_list.val,end=' ') #同一行显示
linked_list=linked_list.next
print() #换行
4)step4:快速排序主方法
def quickSort(start,end):
if start==None or start==end: return
part=partition(start,end) #把数组分成左右两部分,递归排序
if part!=start:
quickSort(start,part.pre)
if part!=end:
quickSort(part.next,end)
5)step5:快排核心方法
def partition(start,end):
if start==end: return
key=start.val #选定头节点,并找到其在列表中的正确位置
while start!=end:
while start!=end and end.val>=key: #右侧数值比key大,则指针左移
end=end.pre
start.val=end.val #把右侧小值交换到左侧节点
while start!=end and start.val<=key: #左侧数值比key小,则指针右移
start=start.next
end.val=start.val #把左侧大值交换到右侧节点
start.val=key #key值放到搜索到的结果位置上
return start
6)step6:测试方法:
def testQuickSort():
arr1 = [2, 3, 7, 5, 1, 23, 14, 8, 2, 9, 6]
start,end = initDoubleLinkedList(arr1)
traverse(start)
quickSort(start,end)
traverse(start)
结果截图:
以上就是该算法的实现步骤,有问题的话望留言指正。对各位如果有些许帮助,但求一赞!