算法
冒泡算法:
第一种
data_set = [9,7,54,12,52,12,1]
for j in range(len(data_set)):
for i in range(len(data_set)-j-1):
if data_set[i] > data_set[i+1]:
tmp = data_set[i]
data_set[i] = data_set[i+1]
data_set[i+1] = tmp
#data_set[i],data_set[i+1] = data_set[i+1],data_set[i] #可以把上面三行代码简化成一行
第二种
a = [12,52,12,2,3,1]
for i in range(len(a)):
for j in range(i+1,len(a)):
if a[i] > a[j]:
a[i],a[j] > a[j],a[i]
print(a)
堆排序
import time
import random
time_start = time.time()
data_set = [random.randrange(10000) for i in range(10000)]
for j in range(len(data_set),1,-1):
for i in range(len(j/2-1),-1 -1):
left_child_index = i*2 + 1
right_child_index = left_child_index + 1
left_child = data_set[left_child_index]
if left_child > data_set[i]
data_set[left_child_index],data_set[i] = data_set[i],data_set[left_child_index]
if right_child_index < j:
right_child = data_set[right_child_index]
if right_child > data_set[i]:
data_set[right_child_index],data_set[i] = data_set[i],data_set[right_child_index]
data_set[0],data_set[j-1] = data_set[j-1],data_set[0]
print(time.time()-time_start,data_set)
希尔
import time
import random
data_set = [random.randrange(10000) for i in range(10000)]
step = int(len(data_set)/2)
while step >=1:
for i in range(len(data_set)-step):
if data__set[i] > data_set[i+step]:
data_set[i],data_set[i+step] = data_set[i+step],data_set[i]
step = int(step/2)
else:
for i in range(len(data_set)):
while i > 0 and data_set[i] < data_set[i-1]:
temp = data_set[i]
data_set[i] = data_set[i-1]
data_set[i-1] = temp
i -= 1
time = time.time()
print(data_set,time)
快排
data_list = [12,21,52,12,23,254,1,2,3,-9]
def quick_sort(data_list,left,right):
if left >= right:
return data_list
key = data_list[left]
low = left
high = right
while left < right:
while left < right and data_list[right] >= key:
right -= 1
data_list[left] = data_list[right]
while left < right and data_list[left] <= key:
left += 1
data_list[right] = data_list[left]
data_list[right] = key
quick_sort(data_list,low,left - 1)
quick_sort(data_list,left + 1,high)
return data_list
if __name__ == '__main__':
quick_sort(data_list,0,len(data_list)-1)
print(data_list)
def quick_sort(array,left,right):
"""
:param array:
:param left: 列表的第一个索引
:param right: 列表最后一个元素的索引
:return:
"""
if left >= right:
return
low = left
high = right
key = array[low] #第一个值
while low < high: #只要左右未遇见
while low < high and array[high] > key: #找到列表右边比key大的值为止
high -= 1
array[low] = array[high] #此时直接把key(array[low]) 跟比它大的array[high]进行交换
array[high] = key
while low < high and array[low] < key: #找到key左边比key大的值,这里为何是<=而不是<呢?你要思考...
low += 1
array[high] = array[low] #找到了左边比k大的值,把array[high](此时应该刚存成了key)跟这个比key大的array[low]进行调换
array[low] = key
quick_sort(array,left,low-1) #最后用同样的方式对分出来的左边的小组进行同行的做法
quick_sort(array,low+1,right) #用同样的方式对分出来的右边的小组进行同上的做法
if __name__ == '__main__':
array = [
96, 14, 10, 9, 6, 99, 16, 5, 1, 3, 2, 4, 1, -123, -876, 13, 26, 18, 2, 45, 34, 23, 1, 7, 3, 22, 19, 2
]
print("before sort:",array)
quick_sort(array,0,len(array)-1)
print("------final------")
print(array)
插入
data_list = [34,12,42,11,52,41,2,12,42,1,245,-9,52,12,42,112,52,12]
第一种方法:
for i in range(len(datta_list)):
while i > 0 and data_list[i] < data_list[i - 1]:
tmp = data_list[i]
data_list[i] = data_list[i - 1]
data_list[i - 1] = tmp
i -= 1
print(data_list)
print(data_list)
第二种方法:
for i in range(1,len(data_list)):
key = data_list[i]
for j in range(i-1,-1,-1):
if data_list[j] > key:
data_list[j + 1] = data_list[j]
data_list[j] = key
print(data_list)
第三种方法:
count = len(data_list)
for i in range(1,count):
key = data_list[i]
j = i - 1
while j >= 0:
if data_list[j] > key:
data_list[j + 1] = data_list[j]
data_list[j] = key
j -= 1
print(data_list)
chaoru_list = [51,2,142,21,41,21,21,44,5,1255,4212,554,22,541,-5,124]
def handler(array):
for i in range(1,len(array)):
position = i #刚开始往左边走的第一个位置
current_val = array[i] #先把当前值存下来
while position > 0 and current_val < array[position - 1]:
'''
这里为什用while循环,咋们先判断左边的值的时候知道他有多少个值么?不知道,所以用 while循环什么时候停下来呢?当左边没有值得时候,或者当他大于左边的值得时候
'''
array[position] = array[position - 1] #如果while条件成立把当前的值替换为他上一个值
"""
比如一个列表:
[3,2,4,1]
现在循环到1了,他前面的元素已经循环完了
[2,3,4]1
首先我们记录下当前这个position的值 = 1
[2,3,4,4]这样,就出一个位置了
在对比前面的3,1比小3小
[2,3,3,4]在替换一下他们的值
在对比2
[2,2,3,4]
最后while不执行了在进行替换'array[position] = current_val #把值替换'
"""
position -= 1
#当上面的条件都不成立的时候{左边没有值/做边的值不比自己的值小}
array[position] = current_val #把值替换
if __name__ == '__main__':
handler(chaoru_list)
print(chaoru_list)
选择
data_list = [32,12,42,15,42,15,42,15,414,-9]
第一种方法:
for k in range(len(data_list)):
set_len_index = k
for i in range(k,len(data_list))
if data_list[i] < data_lisst[set_len_index]:
set_len_index = i
tmp = data_list[set_len_index]
data_list[set_len_index] = data_list[k]
data_list[k] = tmp
print(data_list)s
print(data_list)
第二种方法
count = len(data_list)
for i in range(0,count):
min = i
for j in range(i + 1,count):
if data_list[min] > data_list[j]:
min = j
data_list[min],data_list[i] = data_list[i],data_list[min]
print(data_list)

浙公网安备 33010602011771号