Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4f75179

Browse files
committed
更新代码模板
1 parent e78071c commit 4f75179

10 files changed

+80
-32
lines changed

‎Templates/01.Array/Array-BubbleSort.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
class Solution:
22
def bubbleSort(self, arr):
3+
# 第 i 趟排序
34
for i in range(len(arr)):
5+
# 从序列中前 n - i + 1 个元素的第 1 个元素开始,相邻两个元素进行比较
46
for j in range(len(arr) - i - 1):
7+
# 相邻两个元素进行比较,如果前者大于后者,则交换位置
58
if arr[j] > arr[j + 1]:
69
arr[j], arr[j + 1] = arr[j + 1], arr[j]
710

‎Templates/01.Array/Array-BucketSort.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,32 @@
11
class Solution:
22
def insertionSort(self, arr):
3+
# 遍历无序序列
34
for i in range(1, len(arr)):
45
temp = arr[i]
56
j = i
7+
# 从右至左遍历有序序列
68
while j > 0 and arr[j - 1] > temp:
9+
# 将有序序列中插入位置右侧的元素依次右移一位
710
arr[j] = arr[j - 1]
811
j -= 1
12+
# 将该元素插入到适当位置
913
arr[j] = temp
1014

1115
return arr
1216

1317
def bucketSort(self, arr, bucket_size=5):
18+
# 计算待排序序列中最大值元素 arr_max 和最小值元素 arr_min
1419
arr_min, arr_max = min(arr), max(arr)
20+
# 定义桶的个数为 (最大值元素 - 最小值元素) // 每个桶的大小 + 1
1521
bucket_count = (arr_max - arr_min) // bucket_size + 1
22+
# 定义桶数组 buckets
1623
buckets = [[] for _ in range(bucket_count)]
1724

25+
# 遍历原始数组元素,将每个元素装入对应区间的桶中
1826
for num in arr:
1927
buckets[(num - arr_min) // bucket_size].append(num)
2028

29+
# 对每个桶内的元素单独排序,并合并到 res 数组中
2130
res = []
2231
for bucket in buckets:
2332
self.insertionSort(bucket)

‎Templates/01.Array/Array-CountingSort.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
11
class Solution:
22
def countingSort(self, arr):
3+
# 计算待排序序列中最大值元素 arr_max 和最小值元素 arr_min
34
arr_min, arr_max = min(arr), max(arr)
5+
# 定义计数数组 counts,大小为 最大值元素 - 最小值元素 + 1
46
size = arr_max - arr_min + 1
57
counts = [0 for _ in range(size)]
6-
8+
9+
# 统计值为 num 的元素出现的次数
710
for num in arr:
811
counts[num - arr_min] += 1
12+
13+
# 计算元素排名
914
for j in range(1, size):
1015
counts[j] += counts[j - 1]
1116

17+
# 反向填充目标数组
1218
res = [0 for _ in range(len(arr))]
1319
for i in range(len(arr) - 1, -1, -1):
20+
# 根据排名,将 arr[i] 放在数组对应位置
1421
res[counts[arr[i] - arr_min] - 1] = arr[i]
22+
# 将 arr[i] 的对应排名减 1
1523
counts[arr[i] - arr_min] -= 1
1624

1725
return res

‎Templates/01.Array/Array-InsertionSort.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
class Solution:
22
def insertionSort(self, arr):
3+
# 遍历无序序列
34
for i in range(1, len(arr)):
45
temp = arr[i]
56
j = i
7+
# 从右至左遍历有序序列
68
while j > 0 and arr[j - 1] > temp:
9+
# 将有序序列中插入位置右侧的元素依次右移一位
710
arr[j] = arr[j - 1]
811
j -= 1
12+
# 将该元素插入到适当位置
913
arr[j] = temp
1014

1115
return arr

‎Templates/01.Array/Array-MaxHeapSort.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,45 @@
11
class Solution:
22
# 调整为大顶堆
3-
def heapify(self, nums: [int], index: int, end: int):
3+
def heapify(self, arr: [int], index: int, end: int):
4+
# 根节点为 index,左节点为 2 * index + 1, 右节点为 2 * index + 2
45
left = index * 2 + 1
56
right = left + 1
67
while left <= end:
78
# 当前节点为非叶子结点
89
max_index = index
9-
if nums[left] > nums[max_index]:
10+
if arr[left] > arr[max_index]:
1011
max_index = left
11-
if right <= end and nums[right] > nums[max_index]:
12+
if right <= end and arr[right] > arr[max_index]:
1213
max_index = right
1314
if index == max_index:
1415
# 如果不用交换,则说明已经交换结束
1516
break
16-
nums[index], nums[max_index] = nums[max_index], nums[index]
17+
arr[index], arr[max_index] = arr[max_index], arr[index]
1718
# 继续调整子树
1819
index = max_index
1920
left = index * 2 + 1
2021
right = left + 1
2122

2223
# 初始化大顶堆
23-
def buildMaxHeap(self, nums: [int]):
24-
size = len(nums)
24+
def buildMaxHeap(self, arr: [int]):
25+
size = len(arr)
2526
# (size - 2) // 2 是最后一个非叶节点,叶节点不用调整
2627
for i in range((size - 2) // 2, -1, -1):
27-
self.heapify(nums, i, size - 1)
28-
return nums
28+
self.heapify(arr, i, size - 1)
29+
return arr
2930

3031
# 升序堆排序,思路如下:
3132
# 1. 先建立大顶堆
3233
# 2. 让堆顶最大元素与最后一个交换,然后调整第一个元素到倒数第二个元素,这一步获取最大值
3334
# 3. 再交换堆顶元素与倒数第二个元素,然后调整第一个元素到倒数第三个元素,这一步获取第二大值
3435
# 4. 以此类推,直到最后一个元素交换之后完毕。
35-
def maxHeapSort(self, nums: [int]):
36-
self.buildMaxHeap(nums)
37-
size = len(nums)
36+
def maxHeapSort(self, arr: [int]):
37+
self.buildMaxHeap(arr)
38+
size = len(arr)
3839
for i in range(size):
39-
nums[0], nums[size - i - 1] = nums[size - i - 1], nums[0]
40-
self.heapify(nums, 0, size - i - 2)
41-
return nums
40+
arr[0], arr[size - i - 1] = arr[size - i - 1], arr[0]
41+
self.heapify(arr, 0, size - i - 2)
42+
return arr
4243

43-
def sortnumsay(self, nums: List[int]) -> List[int]:
44+
def sortArray(self, nums: List[int]) -> List[int]:
4445
return self.maxHeapSort(nums)

‎Templates/01.Array/Array-MergeSort.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class Solution:
2-
def merge(self, left_arr, right_arr): # 归并
2+
def merge(self, left_arr, right_arr): # 归并过程
33
arr = []
44
left_i, right_i = 0, 0
55
while left_i < len(left_arr) and right_i < len(right_arr):
@@ -23,7 +23,7 @@ def merge(self, left_arr, right_arr): # 归并
2323

2424
return arr # 返回排好序的结果数组
2525

26-
def mergeSort(self, arr): # 分割
26+
def mergeSort(self, arr): # 分割过程
2727
if len(arr) <= 1: # 数组元素个数小于等于 1 时,直接返回原数组
2828
return arr
2929

‎Templates/01.Array/Array-QuickSort.py

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,37 @@
11
import random
22

3-
43
class Solution:
4+
# 从 arr[low: high + 1] 中随机挑选一个基准数,并进行移动排序
55
def randomPartition(self, arr: [int], low: int, high: int):
6+
# 随机挑选一个基准数
67
i = random.randint(low, high)
7-
arr[i], arr[high] = arr[high], arr[i]
8+
# 将基准数与最低位互换
9+
arr[i], arr[low] = arr[low], arr[i]
10+
# 以最低位为基准数,然后将序列中比基准数大的元素移动到基准数右侧,比他小的元素移动到基准数左侧。最后将基准数放到正确位置上
811
return self.partition(arr, low, high)
9-
12+
13+
# 以最低位为基准数,然后将序列中比基准数大的元素移动到基准数右侧,比他小的元素移动到基准数左侧。最后将基准数放到正确位置上
1014
def partition(self, arr: [int], low: int, high: int):
11-
i = low - 1
12-
pivot = arr[high]
13-
14-
for j in range(low, high):
15-
if arr[j] <= pivot:
16-
i += 1
15+
pivot = arr[low] # 以第 1 为为基准数
16+
i = low + 1 # 从基准数后 1 位开始遍历,保证位置 i 之前的元素都小于基准数
17+
18+
for j in range(i, high + 1):
19+
# 发现一个小于基准数的元素
20+
if arr[j] < pivot:
21+
# 将小于基准数的元素 arr[j] 与当前 arr[i] 进行换位,保证位置 i 之前的元素都小于基准数
1722
arr[i], arr[j] = arr[j], arr[i]
18-
arr[i + 1], arr[high] = arr[high], arr[i + 1]
19-
return i + 1
23+
# i 之前的元素都小于基准数,所以 i 向右移动一位
24+
i += 1
25+
# 将基准节点放到正确位置上
26+
arr[i - 1], arr[low] = arr[low], arr[i - 1]
27+
# 返回基准数位置
28+
return i - 1
2029

2130
def quickSort(self, arr, low, high):
2231
if low < high:
32+
# 按照基准数的位置,将序列划分为左右两个子序列
2333
pi = self.randomPartition(arr, low, high)
34+
# 对左右两个子序列分别进行递归快速排序
2435
self.quickSort(arr, low, pi - 1)
2536
self.quickSort(arr, pi + 1, high)
2637

‎Templates/01.Array/Array-RadixSort.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
class Solution:
22
def radixSort(self, arr):
3+
# 桶的大小为所有元素的最大位数
34
size = len(str(max(arr)))
45

6+
# 从低位到高位依次遍历每一位,以各个数位值为索引,对数组进行按数位排序
57
for i in range(size):
8+
# 使用一个长度为 10 的桶来存放各个位上的元素
69
buckets = [[] for _ in range(10)]
10+
# 遍历数组元素,根据元素对应位上的值,将其存入对应位的桶中
711
for num in arr:
812
buckets[num // (10 ** i) % 10].append(num)
13+
# 清空原始数组
914
arr.clear()
15+
# 从桶中依次取出对应元素,并重新加入到原始数组
1016
for bucket in buckets:
1117
for num in bucket:
1218
arr.append(num)

‎Templates/01.Array/Array-SelectionSort.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
class Solution:
22
def selectionSort(self, arr):
33
for i in range(len(arr) - 1):
4-
# 记录未排序序列中最小数的索引
4+
# 记录未排序部分中最小值的位置
55
min_i = i
66
for j in range(i + 1, len(arr)):
77
if arr[j] < arr[min_i]:
88
min_i = j
9-
# 如果找到最小数,将 i 位置上元素与最小数位置上元素进行交换
9+
# 如果找到最小值的位置,将 i 位置上元素与最小值位置上的元素进行交换
1010
if i != min_i:
1111
arr[i], arr[min_i] = arr[min_i], arr[i]
1212
return arr

‎Templates/01.Array/Array-ShellSort.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,21 @@ class Solution:
22
def shellSort(self, arr):
33
size = len(arr)
44
gap = size // 2
5-
5+
# 按照 gap 分组
66
while gap > 0:
7+
# 对每组元素进行插入排序
78
for i in range(gap, size):
9+
# temp 为每组中无序序列第 1 个元素
810
temp = arr[i]
911
j = i
12+
# 从右至左遍历每组中的有序序列元素
1013
while j >= gap and arr[j - gap] > temp:
14+
# 将每组有序序列中插入位置右侧的元素依次在组中右移一位
1115
arr[j] = arr[j - gap]
1216
j -= gap
17+
# 将该元素插入到适当位置
1318
arr[j] = temp
19+
# 缩小 gap 间隔
1420
gap = gap // 2
1521
return arr
1622

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /