Skip to content

Commit 2e907e2

Browse files
author
tianqing.liang
committed
二分搜索
1 parent 04719e4 commit 2e907e2

File tree

3 files changed

+58
-32
lines changed

3 files changed

+58
-32
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
6. 递归
1212
7. **[Dart,Python]归并排序**
1313
8. **[Dart,Python]快速排序**
14-
9. 二分搜索
14+
9. **[Dart,Python]二分搜索**
1515
10. 二分搜索树
1616
11. 集合 和 映射
1717
12.

python/linkedlist.py

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,25 @@ def __init__(self,value=None,next=None):
77
def __str__(self):
88
return self.value;
99

10+
class LinkedList(object):
11+
12+
def __init__(self):
13+
self.__head = None
14+
self.__size = 0
15+
16+
def getSize(self):
17+
return self.__size
18+
19+
def isEmpty(self):
20+
return self.__size == 0;
1021

22+
def remove(self,index):
23+
if index<0 or index> self.__size:
24+
raise Exception("Remove Failed,Illegal index")
25+
prev = self.__head
26+
for i in range(0,index):
27+
prev = prev.next
28+
1129

1230

1331

@@ -27,27 +45,10 @@ def __str__(self):
2745

2846

2947

30-
# class LinkedList<T> {
31-
# _Node? _dummyHead;
32-
# late int _size;
33-
34-
# LinkedList() {
35-
# _dummyHead = new _Node.withEmpty();
36-
# _size = 0;
37-
# }
38-
39-
# int getSize() {
40-
# return _size;
41-
# }
42-
43-
# bool isEmpty() {
44-
# return _size == 0;
45-
# }
4648

49+
# class LinkedList<T> {
4750
# remove(int index){
48-
# if (index < 0 || index > _size) {
49-
# throw Exception("Remove Failed,Illegal index");
50-
# }
51+
#
5152
# _Node? prev = _dummyHead;
5253
# for(var i =0;i<index ;i++){
5354
# prev = prev?.next;

python/multiSort.py

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
选择排序
55
插入排序
66
希尔排序
7+
快速排序
8+
归并排序
79
'''
810
import random
911
import time
@@ -85,24 +87,38 @@ def partition(sortList,left,right):
8587
return i +1
8688

8789
# 归并排序
88-
def merge(arr1, arr2):
90+
def merge(sortList1, sortList2):
8991
result = []
9092
while arr1 and arr2:
91-
if arr1[0] < arr2[0]:
92-
result.append(arr1.pop(0))
93+
if sortList1[0] < sortList2[0]:
94+
result.append(sortList1.pop(0))
9395
else:
94-
result.append(arr2.pop(0))
95-
if arr1:
96-
result += arr1
97-
if arr2:
98-
result += arr2
96+
result.append(sortList2.pop(0))
97+
if sortList1:
98+
result += sortList1
99+
if sortList2:
100+
result += sortList2
99101
return result
100102

101-
def merge_sort(arr):
102-
if len(arr) <= 1:
103+
def merge_sort(sortList):
104+
if len(sortList) <= 1:
103105
return arr
104-
mid = len(arr) // 2
105-
return merge(merge_sort(arr[:mid]), merge_sort(arr[mid:]))
106+
mid = len(sortList) // 2
107+
return merge(merge_sort(sortList[:mid]), merge_sort(sortList[mid:]))
108+
109+
# 二分搜索
110+
def binarySearch(sortList,left,right,x):
111+
if right >= left :
112+
mid = int(left + (right-left)/2)
113+
if sortList[mid] == x:
114+
return mid
115+
elif sortList[mid] >x:
116+
return binarySearch(sortList, left, mid-1, x)
117+
else:
118+
return binarySearch(sortList, mid+1, right, x)
119+
else:
120+
return -1
121+
106122

107123
# 计算结果,计算时间
108124
def caculateResultAndTime(name,fuction,randomseed):
@@ -133,6 +149,15 @@ def caculateResultAndTime(name,fuction,randomseed):
133149
print("排序结果:",sortList,' 花费时间:',endTime-startTime)
134150
print("-------------------- 结束\n")
135151

152+
print("--------------------二分搜索")
153+
sortList = list(range(15))
154+
print("原始数据:",sortList)
155+
startTime = time.perf_counter()
156+
result = binarySearch(sortList, 0, len(sortList)-1,10)
157+
endTime = time.perf_counter()
158+
print("查找结果:",result,' 花费时间:',endTime-startTime)
159+
print("-------------------- 结束\n")
160+
136161

137162

138163

0 commit comments

Comments
 (0)