📅  最后修改于: 2023-12-03 14:54:49.289000             🧑  作者: Mango
UGC NET CS 2015 年 6 月 – III |问题 35 是一道程序设计题,旨在考察程序员的逻辑思维能力和编程实现能力。该题需要实现一个函数,能够对一个长度为 n 的整数数组进行排序,且时间复杂度不超过 O(n log n)。
一般的排序算法,如冒泡排序、插入排序等,时间复杂度为 O(n^2),效率较低。因此,我们需要使用 O(n log n) 的排序算法,如快速排序、归并排序等。具体实现可参考以下几种排序算法:
快速排序是一种基于分治思想的排序算法,其核心思想是选定一个基准值,通过一趟排序将待排记录分割成独立的两部分,其中一部分的所有记录均比基准值小,另一部分的所有记录均比基准值大,然后分别对这两部分进行排序。其时间复杂度为 O(n log n)。
以下是快速排序的代码实现:
# 快速排序
def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
left = [x for x in arr[1:] if x < pivot]
right = [x for x in arr[1:] if x >= pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
归并排序是一种基于分治思想的排序算法,其核心思想是将待排记录分割成若干组,对每组进行排序,然后将各组已经排好序的子序列合并成新的有序序列,直到全部子序列合并成一个有序序列。其时间复杂度为 O(n log n)。
以下是归并排序的代码实现:
# 归并排序
def merge_sort(arr):
if len(arr) <= 1:
return arr
else:
middle = len(arr) // 2
left = merge_sort(arr[:middle])
right = merge_sort(arr[middle:])
result = []
i = j = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += left[i:]
result += right[j:]
return result
以上便是本题的实现思路和代码示例,包含快速排序和归并排序两种算法。根据题目要求,可以根据需要选择其中之一进行实现。希望本文能对各位程序员有所帮助。