📜  门|门 IT 2008 |第 56 题(1)

📅  最后修改于: 2023-12-03 15:28:48.543000             🧑  作者: Mango

门|门 IT 2008 | 第 56 题

本题为算法题,需要实现一个快速排序算法。

题目描述

给定一个无序数组,按照从小到大的顺序进行排序。

输入格式

第一行为一个正整数n,表示数组的元素个数。

接下来n行,每行一个整数,表示数组的元素。

输出格式

输出排好序的数组,每个元素之间用空格隔开。

样例输入
10
1
8
6
2
3
9
4
7
10
5
样例输出
1 2 3 4 5 6 7 8 9 10
代码实现
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)

n = int(input())
arr = []
for i in range(n):
    arr.append(int(input()))

arr_sorted = quick_sort(arr)
print(' '.join([str(x) for x in arr_sorted]))

以上为Python代码实现快速排序算法,时间复杂度为O(nlogn)。可以通过以下步骤进行排序:

  1. 如果数组长度小于等于1,直接返回。
  2. 选取数组中间的元素作为基准值pivot。
  3. 遍历数组,将小于基准值的元素放到left数组,等于基准值的元素放到middle数组,大于基准值的元素放到right数组。
  4. 递归地对left和right数组进行快速排序。
  5. 最后将排好序的left、middle和right数组拼接在一起,得到排好序的原数组。

Markdown语法说明

标题

使用#号表示标题,#的数量表示标题的级别。

段落

段落之间空一行即可。

代码块

使用``符号包含代码块。

列表

使用*或+或-表示无序列表,数字符号表示有序列表。

链接和图片

使用显示文字表示链接,使用表示图片。