今日は、筆記試験に参加したemmmmmmm、ハードな努力を続けました。
良い習慣:明確な思考は、コードラピッドプロトタイピングを行うことができます。コードより読みやすいが所有を作るために適切なコメント。説明するために、チャートやアクションフィギュアを行うための適切なツールを準備します。
1、バケットソート
「」「
アイデア:これは、元の配列対応するタブ(インデックス= NUM)は、次にバケットから除去された実行を開始する(MAX + 1)番目の空のバケットを設定し、最大値を見つけるために整数の配列です。
」 " "
def bucket_sort_func(arr):
if len(arr) < 2:
return arr
max_arr = max(arr)
# 放空桶
bucket = [0 for _ in range(max_arr+1)]
for num in arr:
bucket[num] += 1
sort_arr = []
for i in range(len(bucket)):
if bucket[i] != 0:
for ele in range(bucket[i]):
sort_arr.append(i)
return sort_arr
# 放回原数组
def bucket_sort(arr):
res = bucket_sort_func(arr)
for i in range(len(arr)):
arr[i] = res[i]
2、ヒープソート
「」「
アイデア:最初の大きなヒープの根、建設のルートプロセスに大きな杭、修復プロセスに大きな根ヒープであるか理解
「」」
def heap_sort(arr):
if len(arr) < 2:
return arr
for i in range(len(arr)):
heap_insert(arr, i)
size = len(arr)
size -= 1
arr[0], arr[size] = arr[size], arr[0]
while size > 0:
heapify(arr, 0, size)
size -= 1
arr[0], arr[size] = arr[size], arr[0]
def heap_insert(arr, index):
# 构造大根堆
# 出现一个BUG,最后一个数没有排好,问题见以下描述。必须要int,整除不可以!
# index = 0
# a = int((index - 1) / 2)
# b = (index - 1) // 2
# print(a, b) 打印结果 a=0,b=-1
# while arr[index] > arr[((index-1)//2)]:
# arr[index], arr[((index-1)//2)] = arr[((index-1)//2)], arr[index]
# index = ((index-1)//2)
while arr[index] > arr[int((index-1)/2)]:
arr[index], arr[int((index-1)/2)] = arr[int((index-1)/2)], arr[index]
index = int((index-1)/2)
def heapify(arr, index, size):
# 调节大根堆
left = index*2 + 1
while left < size:
if (left+1) < size and arr[left+1] > arr[left]:
largest = left + 1
else:
largest = left
if arr[largest] > arr[index]:
largest = largest
else:
largest = index
if largest == index:
break
arr[largest], arr[index] = arr[index], arr[largest]
index = largest
left = index*2 + 1
3、バケットソート拡大
タイトル:必要に応じて、所要時間複雑性O(N)の隣接する二つの最大数との差をソートした後、整数の配列を与えられ、要求はノンソートベースと比較することができません。
「」「
アイデア:max及び最小放電空バケット、ブール値が最小、最大、浴槽内部パラメータを更新、アレイに実行を開始するに入れ、空であるかどうかを決定することを含むことができるバケット
」「」
# 待后续补充
トピック2:指定された配列の中央値を見つけます。
「」「
アイデア:大根ヒープ、少しヒープルート、維持するために
バランスを!」「」
# 待后续补充