按两个不同的顺序对数组进行排序,而不使用内置方法
Sort array of pairs by two different orders, without using built-in methods
我有一个给定的数组对 T = [[a1,b1],[a2,b2],...,[an,bn]] 我想对它进行排序以便元素 b1, b2,...,bn 按升序排列,如果某些 bs 相等,则按降序排列 'a' 个元素
示例:对于 [1,6]、[2,3]、[5,7]、[5,6]、[2,5],结果应如下所示:[2,3], [2,5],[5,6],[1,6],[5,7]
问题是我无法使用任何内置函数、方法等
起初我想使用两次稳定排序,但我也关心执行时间,有没有更快的方法呢?
实现任何简单的排序算法,如 InsertionSort,但不要直接比较对,而是使用如下函数:
def less(p1, p2):
if p1[1] < p2[1]:
return True
elif p1[1] > p2[1]:
return False
else:
return p1[0] > p2[0]
如果列表大小较大,则应用具有相同比较函数的更快算法
所以不要像这样:
while j >=0 and key < T[j] :
你必须写:
while j >=0 and less(key, T[j]):
我有一个给定的数组对 T = [[a1,b1],[a2,b2],...,[an,bn]] 我想对它进行排序以便元素 b1, b2,...,bn 按升序排列,如果某些 bs 相等,则按降序排列 'a' 个元素
示例:对于 [1,6]、[2,3]、[5,7]、[5,6]、[2,5],结果应如下所示:[2,3], [2,5],[5,6],[1,6],[5,7]
问题是我无法使用任何内置函数、方法等
起初我想使用两次稳定排序,但我也关心执行时间,有没有更快的方法呢?
实现任何简单的排序算法,如 InsertionSort,但不要直接比较对,而是使用如下函数:
def less(p1, p2):
if p1[1] < p2[1]:
return True
elif p1[1] > p2[1]:
return False
else:
return p1[0] > p2[0]
如果列表大小较大,则应用具有相同比较函数的更快算法
所以不要像这样:
while j >=0 and key < T[j] :
你必须写:
while j >=0 and less(key, T[j]):