def merge(a, b): c = [] h = j = 0 # 依次便利,拿到兩個數組更小的元素, while j < len(a) and h < len(b): # 如果0索引位置的元素a更小,添加a[0]到c,再將a[1]與b[0]比較,依次類推,剩余最后的元素就是两个数组的最大值 if a[j] < b[h]: c.append(a[j]) j += 1 else: c.append(b[h]) h += 1
if j == len(a): for i in b[h:]: c.append(i) else: for i in a[j:]: c.append(i)
return c
def merge_sort(lists): if len(lists) <= 1: return lists middle = len(lists)//2 left = merge_sort(lists[:middle]) right = merge_sort(lists[middle:]) return merge(left, right)
if __name__ == '__main__': a = [4, 7, 8, 3, 5, 9,10] print(merge_sort(a))
2.快排
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#coding:utf-8 defquicksort(list): if len(list)<2: return list else: midpivot = list[0] lessbeforemidpivot = [i for i in list[1:] if i<=midpivot] biggerafterpivot = [i for i in list[1:] if i > midpivot] finallylist = quicksort(lessbeforemidpivot)+[midpivot]+quicksort(biggerafterpivot) return finallylist
print quicksort([2,4,6,7,1,2,5])
# 使用lambda函数实现 quicksort=lambda data:data if len(data)<2else quicksort([item for item in data[1:] if item<=data[0]])+[data[0]]+quicksort([item for item in data[1:] if item>data[0]])
def is_prime_number(k): if k<2: return False for i in range(2,k): if k%i==0: return False return True
def get_prime_number(start,end): # prime_numbers = [] for k in range(start,end+1): if is_prime_number(k): yield k # prime_numbers.append(k) # return prime_numbers
prime_numbers = get_prime_number(1,100) # print(next(prime_numbers)) for i in prime_numbers: print(i)