【发布时间】:2021-04-27 09:22:59
【问题描述】:
我正在尝试使用快速排序在 Python 中解决这个问题:
给定一个整数数组 A[],根据元素的频率对数组进行排序。那就是频率较高的元素首先出现。如果两个元素的频率相同,那么较小的数字在前。
我创建了一个数组来存储A[]中每个整数出现的次数,如下:
def find_count(arr, n):
count = [0]*(max(arr)+1)
for i in arr:
count[i] += 1
return count
接下来,我使用快速排序来按出现次数的降序对元素进行排序:
def quicksort(arr, low, high, count):
if(low < high):
i = low
j = high
pivot = low
while(i < j):
while(i < high and count[arr[i]] >= count[arr[pivot]]):
i += 1
while(count[arr[j]] < count[arr[pivot]]):
j -= 1
if(i < j):
arr[i], arr[j] = arr[j], arr[i]
arr[pivot], arr[j] = arr[j], arr[pivot]
quicksort(arr, low, j-1, count)
quicksort(arr, j+1, high, count)
此方法用于按频率降序对元素进行排序。但是,频率相同的元素会以不可预知的顺序出现(不是按要求按大小递增的顺序):
For Input:
[5, 5, 4, 6, 4]
your output is:
[5, 4, 4, 5, 6]
required output:
[4, 4, 5, 5, 6]
如何实现一个条件,以按大小递增的顺序对具有相同频率的元素进行排序?
【问题讨论】:
-
你能解释一下你的输入和输出吗?为什么每个都不是整数数组?
-
我处理了输入并将其转换为整数数组,并将输出数组转换为空格分隔的字符串。如果您有兴趣,我会发布该部分
-
@Shield77--我认为它是一个以空格分隔的字符串,但很困惑为什么事情在两行上。将它作为两行上的空格分隔整数我没有遵循排序顺序。首选的是输入数组(Python 列表)和所需的输出数组(Python 列表)。
-
它们是两个不同的输入输出集,对于不够清晰表示抱歉。我将编辑以删除两者的第二行
-
@Shield77--两者都可以,但你应该评论它是两个测试用例。