返回
Featured image of post 洛谷-算法1-2-排序

洛谷-算法1-2-排序

因为Cpp的问题有些题过不了全部样例

【算法1-2】排序

## 【模板】排序

永远不要忘记,永远不要忘记,永远不要忘记

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
n = int(input())
arr = list(map(int, input().split()))

def quick_sort(arr, l, r):
    if l == r:
        return arr[l]
    pivot = arr[(l+r)//2]
    i, j = l, r
    while True:
        while arr[i] < pivot: i += 1
        while arr[j] > pivot: j -= 1
        if i >= j: break 
        arr[i], arr[j] = arr[j], arr[i]
        i, j = i + 1, j - 1
    quick_sort(arr, l, j)
    quick_sort(arr, j+1, r)

quick_sort(arr, 0, len(arr)-1)
for a in arr:
    print(a, end=' ')

【深基9.例1】选举学生会

桶排序,这个可以过快排过不了的样例

1
2
3
4
5
6
7
8
n, m = map(int, input().split())
arr = list(map(int, input().split()))
bin = [0] * (n + 1)
for a in arr:
    bin[a] += 1
for i in range(1, n + 1):
    for j in range(bin[i]):
        print(f"{i} ", end='')

【深基9.例4】求第 k 小的数

这里和LC不一样的地方在于,最小的数是第 0 小

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
n, k = map(int, input().split())
arr = list(map(int, input().split()))

def quick_select(arr, l, r, k):
    if l == r:
        return arr[l]
    pivot = arr[(l+r)//2]
    i, j = l, r 
    while True:
        while arr[i] < pivot: i += 1
        while arr[j] > pivot: j -= 1 
        if i >= j: break 
        arr[i], arr[j] = arr[j], arr[i]
        i, j = i + 1, j - 1
    cnt = j - l + 1
    if k <= cnt:
        return quick_select(arr, l, j, k)
    else:
        return quick_select(arr, j + 1, r, k - cnt)

print(quick_select(arr, 0, len(arr)-1, k + 1))

[NOIP 2006 普及组] 明明的随机数

1
2
3
4
5
6
7
8
9
n = int(input())
arr = list(map(int, input().split()))
bin = [0] * 1001
for a in arr:
    bin[a] = 1 
print(sum(bin))
for i in range(1, 1001):
    if bin[i]:
        print(f"{i} ", end='')
Licensed under CC BY-NC-SA 4.0
© 2023 - 2025 壹壹贰捌· 0Days
共书写了265.7k字·共 93篇文章 京ICP备2023035941号-1