【python】排序

关键词list.sort()

people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
people.sort()
print(people)
> [[4, 4], [5, 0], [5, 2], [6, 1], [7, 0], [7, 1]]
# 默认是按照从小到大的顺序,若要从大到小输出,则关键词reverse设置为True即可
people.sort(reverse=True)
print(people)
> [[7, 1], [7, 0], [6, 1], [5, 2], [5, 0], [4, 4]]
# 自定义排序,按照规则排序等则需要设置关键词key
# key=lambda x:【规则】
# lambda是函数表达式的意思,
# x为list中的元素,若list为二维,则x指[4,4],可以用X[0],X[1]继续索引
# 【】内为规则,或者excel排序中使用的关键字。
# 若使用多个关键字,则用()括起来,里面为不同的关键字,第一关键字、第二关键字...
# 比如这里我希望 第一关键字x[0]按照从大到小排,第二关键字X[1]从小到大排,可以这么写
people.sort(key=lambda x:(-x[0],x[1]))
> [[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
# 或者这么写
people.sort(key=lambda x:(x[0],-x[1]),reverse=True)
> [[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]

# 当元素有负数时,也可以设置按照绝对值排序
people = [1,5,6,-6,4,-2,-6,-2,-9,15]
people.sort(key=lambda x:abs(x))
print(people)
> [1, -2, -2, 4, 5, 6, -6, -6, -9, 15]

函数 sorted()

# 函数sorted()排序,用法与上述一致,
# 但是需要注意排序后对原列表不产生任何影响。

people = [1,5,6,-6,4,-2,-6,-2,-9,15]
sorted(people, key=lambda x:abs(x), reverse=True)
print(people)
> [1, 5, 6, -6, 4, -2, -6, -2, -9, 15]

list2 = sorted(people, key=lambda x:abs(x), reverse=True)
print(list2)
> [15, -9, 6, -6, -6, 5, 4, -2, -2, 1]

手写sort

sort是快排实现,时间复杂度为O(nlogn),最坏情况是O(n^2),
以下是手写快排,采用递归的思想,每次取数组中间的数作为基准,然后把小于基准的放到左边,大于基准的放在右边,递归执行,有点给定前序和中序遍历,求后序遍历的感觉。

def quick_sort(nums):
    n = len(nums)
    if n<2:
        return nums
    mid = n//2

    left = []
    right = []
    for i, num in enumerate(nums):
        if i == mid: continue
        if num <= nums[mid]:
            left.append(num)
        else:
            right.append(num)

    left = quick_sort(left)
    right = quick_sort(right)

    return left + [nums[mid]] + right

import random
k = 10
nums = [0] * k
for i in range(k):
    nums[i] = random.randint(1,100)
print(nums)
print(quick_sort(nums))

猜你喜欢

转载自blog.csdn.net/LoveJSH/article/details/128667669