-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsort_self_test.py
More file actions
78 lines (67 loc) · 2.08 KB
/
sort_self_test.py
File metadata and controls
78 lines (67 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import random
import numpy as np
def mergeSort(array):
if len(array) <= 1:#停止条件不能丢
return array
mid = len(array)//2
left = array[:mid]
right = array[mid:]
return sort2list(mergeSort(left),mergeSort(right))
def sort2list(left,right):
m =[]
i=j=0
while i<len(left) and j<len(right):
if left[i]<=right[j]:
m.append(left[i])
i+=1
else:
m.append(right[j])
j+=1
if i < len(left):
m = m + left[i:]
if j < len(right):
m = m + right[j:]
return m
def quicksort(array,low,high):
if low < high:#停止条件不能丢
pivot = partition(array,low,high)
quicksort(array, low, pivot-1)
quicksort(array, pivot+1, high)
def partition(array,low,high):
rand_index =random.randint(low,high)#random.randint(1,100)随机数中使包括1和100
array[low], array[rand_index] = array[rand_index], array[low]
pivot = low
for i in range(low+1,high+1):
if array[i]<array[low]:
pivot+=1
array[i],array[pivot]=array[pivot],array[i]
array[low], array[pivot] = array[pivot], array[low]
return pivot
def build_heap(array, size):
for i in range(size//2,-1,-1):
heap_adjust(array, i, size)
def heap_adjust(array, i, size):#大顶堆
left = 2*i+1
right = 2 * i + 2
maxIndex = i
if left<size and array[left]>array[maxIndex]:
maxIndex =left
if right<size and array[right]>array[maxIndex]:
maxIndex =right
if maxIndex !=i:
swap(array,maxIndex,i)
heap_adjust(array, maxIndex, size)
def heap_sorting(array):
size = len(array)
build_heap(array, size)
for i in range(size-1,0,-1):
swap(array, 0, i)
heap_adjust(array, 0, i)
def swap(arr, i, j):
arr[i], arr[j] = arr[j], arr[i]
if __name__ == '__main__':
list = [34, 3, 53, 2, 1, 2, 23, 7, 14, -10]
# list = mergeSort(list)
# quicksort(list,0,len(list)-1)
heap_sorting(list)
print(list)