Skip to content

Commit de97af8

Browse files
committedJan 30, 2015
quick sort
1 parent e22173b commit de97af8

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed
 

‎quick_sort.py

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#!/usr/bin/python
2+
# -*- coding: utf-8 -*-
3+
# Definition for singly-linked list.
4+
class ListNode:
5+
def __init__(self, x):
6+
self.val = x
7+
self.next = None
8+
9+
class Solution:
10+
# @param head, a ListNode
11+
# @return a ListNode
12+
def sortList(self, head):
13+
if None == head or None == head.next:
14+
return head
15+
pivot = head
16+
node = head.next
17+
less_list = None
18+
greater_list = None
19+
equal_list = pivot
20+
21+
while None != node:
22+
tmp = node.next
23+
if pivot.val > node.val:
24+
node.next = less_list
25+
less_list = node
26+
elif pivot.val < node.val:
27+
node.next = greater_list
28+
greater_list = node
29+
else:
30+
equal_list.next = node
31+
equal_list = node
32+
node = tmp
33+
#greater_list指向等于pivot的链表
34+
equal_list.next = None
35+
#less_list指向小于pivot的链表
36+
less_list = self.sortList(less_list)
37+
#greater_list指向大于pivot的链表
38+
greater_list = self.sortList(greater_list)
39+
less_list = self.connect(less_list, pivot, greater_list)
40+
41+
return less_list
42+
43+
def connect(self, less_list, pivot, greater_list):
44+
node = pivot
45+
while True:
46+
if node.next == None:
47+
node.next = greater_list
48+
break
49+
node = node.next
50+
51+
node = less_list
52+
if less_list == None:
53+
less_list = pivot
54+
else:
55+
while node.next != None:
56+
node = node.next
57+
node.next = pivot
58+
return less_list
59+
60+
if __name__ == "__main__":
61+
s = Solution()
62+
head = ListNode(49)
63+
node_1 = ListNode(38)
64+
head.next = node_1
65+
66+
node_2 = ListNode(65)
67+
node_1.next = node_2
68+
69+
node_3 = ListNode(57)
70+
node_2.next = node_3
71+
72+
node_4 = ListNode(76)
73+
node_3.next = node_4
74+
75+
node_5 = ListNode(33)
76+
node_4.next = node_5
77+
78+
node_6 = ListNode(27)
79+
node_5.next = node_6
80+
81+
#node_7 = ListNode(13)
82+
#node_6.next = node_7
83+
84+
node = head
85+
while None != node:
86+
print node.val
87+
node = node.next
88+
print '========================='
89+
90+
node = s.sortList(head)
91+
print '#########################'
92+
while None != node:
93+
print node.val
94+
node = node.next

0 commit comments

Comments
 (0)
Please sign in to comment.