File tree Expand file tree Collapse file tree 2 files changed +10073
-0
lines changed Expand file tree Collapse file tree 2 files changed +10073
-0
lines changed Original file line number Diff line number Diff line change 1+
2+ with open ('QuickSort.txt' ) as f :
3+ a = [int (x ) for x in f ]
4+
5+ def FindMedian (A ):
6+ minvalue = min (A )
7+ maxvalue = max (A )
8+ for i in range (3 ):
9+ if A [i ] != minvalue and A [i ] != maxvalue :
10+ return A [i ]
11+
12+ def ChoosePivot (A ,flag ):
13+ n = len (A )
14+ first = A [0 ]
15+ final = A [n - 1 ]
16+ if n / 2 * 2 == n :
17+ k = n / 2 - 1
18+ middle = A [k ]
19+ elif n / 2 * 2 < n :
20+ k = n / 2
21+ middle = A [k ]
22+ else :
23+ print 'error in ChoosePivot to choose middle element of A'
24+
25+ B = [first ,middle ,final ]
26+ med = FindMedian (B )
27+ if med == B [0 ]:
28+ position = 0
29+ elif med == B [1 ]:
30+ position = k
31+ else :
32+ position = n - 1
33+
34+ if flag == 1 :
35+ return 0
36+ if flag == 2 :
37+ return n - 1
38+ if flag == 3 :
39+ return position
40+ else :
41+ print 'wrong flag'
42+
43+ def Swap (A ,first ,second ):
44+ second_value = A [second ]
45+ first_value = A [first ]
46+ A [first ] = second_value
47+ A [second ] = first_value
48+ return A
49+
50+ def Partition (A ):
51+ pivot = A [0 ]
52+ r = len (A )
53+ i = 1
54+ for j in range (1 ,r ):
55+ if A [j ]< pivot :
56+ A = Swap (A ,i ,j )
57+ i += 1
58+ A = Swap (A ,0 ,i - 1 )
59+ return A ,i - 1
60+
61+ def QuickSort (A ,flag ):
62+ n = len (A )
63+
64+ if n > 1 :
65+ p = ChoosePivot (A ,flag )
66+ A = Swap (A ,0 ,p )
67+ A ,pivot_position = Partition (A )
68+ A [:pivot_position ],left = QuickSort (A [:pivot_position ],flag )
69+ A [pivot_position + 1 :],right = QuickSort (A [pivot_position + 1 :],flag )
70+
71+ return A ,left + right + n - 1
72+ else :
73+ return A ,0
You can’t perform that action at this time.
0 commit comments