python - 在冒泡排序中计算气泡,如何在更短的时间内得到这个计数
问题描述
如何在更短的时间内获得此计数。如果有可能用更少的时间获得它,我有时间超越这种类型。
swaped = True
count = 0
while swaped != False:
swaped = False
**count** = **count**+1
# here is bubble count
for i in range(0, N-1):
if(arr[i] > arr[i+1]):
temp = arr[i]
arr[i] = arr[i+1]
arr[i+1] = temp
swaped = True
print(count)
解决方案
您编写的冒泡排序代码已尽可能优化。因此,您需要为算法找到替代方案来达到目的。完成交换次数的算法之一是使用归并排序。您可以使用归并排序来计算 O(nlogn) 时间内的交换。这个问题被称为反转计数。我在下面提供了一个代码示例,可以在 O(nlogn) 时间内完成此操作。
def mergeSort(arr, n):
temp_arr = [0]*n
return tmergeSort(arr, temp_arr, 0, n-1)
# This Function will use MergeSort to count inversions
def tmergeSort(arr, temp_arr, left, right):
# Inversions_count
inv_count = 0
if left < right:
# Mid of an array
mid = (left + right)//2
# calculating inversions_count for the left array.
inv_count = tmergeSort(arr, temp_arr, left, mid)
# calculating inversions_count for the right array.
inv_count += tmergeSort(arr, temp_arr, mid + 1, right)
# Merging two sorted arrays.
inv_count += merge(arr, temp_arr, left, mid, right)
return inv_count
# Merging two sorted arrays.
def merge(arr, temp_arr, left, mid, right):
i = left
j = mid + 1
k = left
inv_count = 0
while i <= mid and j <= right:
# No inversion if arr[i] <= arr[j]
if arr[i] <= arr[j]:
temp_arr[k] = arr[i]
k += 1
i += 1
else:
# Inversion will occur if arr[i] > arr[j]
temp_arr[k] = arr[j]
inv_count += (mid-i + 1)
k += 1
j += 1
# The remaining elements of left array are copied
while i <= mid:
temp_arr[k] = arr[i]
k += 1
i += 1
# The remaining elements of right array are copied
while j <= right:
temp_arr[k] = arr[j]
k += 1
j += 1
for loop_var in range(left, right + 1):
arr[loop_var] = temp_arr[loop_var]
return inv_count
# Given array is
arr = [83, 20, 9, 50, 115, 61, 17]
n = len(arr)
result = mergeSort(arr, n)
print("Inversions_count =", result)
推荐阅读
- firebase - 来自 Firebase 的位置数据未加载到谷歌地图中
- javascript - 无法使用 Edge 中的 msLaunchUri 打开 Office 文档
- android - 是否有任何关于 android 样式调整的实际更新文档?
- typescript - 如何从 ts 文件中导入子模块
- php - 如何开始创建 WordPress 插件?
- javascript - 无法获取日期格式
- python - 如何在 python 中使用 kubernetes-client lib 获取节点的内存
- mysql - 在 Spring Boot 中处理本机查询时获取混乱的数据或错误的数据
- linux - 如何处理 linux 页面缓存(标签查找)返回的页面少于所要求的页面?
- sql - CHECK 约束失败