返回

计算机考研408每日一题150:排序算法逐个击破

前端

计算机考研408每日一题150

题目:若对序列(2,12,16,70,5,10)按值从小到大进行排序:

  • 第1趟排序的结果为:(2,12,16,5,10,70)
  • 第2趟排序的结果为:(2,12,5,10,16,70)
  • 第3趟排序的结果为:()

排序算法逐个击破

排序算法是计算机科学中最基本和最常用的算法之一,它用于将一组元素按某种顺序排列。在计算机考研408中,排序算法是一个非常重要的知识点,经常出现在考试中。

选择排序

选择排序是一种简单有效的排序算法,它的基本思想是:

  1. 在未排序序列中找到最小(或最大)元素,并将其与序列的第一个元素交换。
  2. 然后在剩余的未排序序列中找到最小(或最大)元素,并将其与序列的第二个元素交换。
  3. 重复步骤1和步骤2,直到整个序列有序。

选择排序的时间复杂度为O(n^2),这意味着随着序列长度的增加,排序的时间开销将呈平方级增长。

冒泡排序

冒泡排序也是一种简单的排序算法,它的基本思想是:

  1. 比较相邻的两个元素,如果第一个元素大于第二个元素,则交换它们。
  2. 然后将指针移到下一个元素,并重复步骤1,直到序列的末尾。
  3. 重复步骤1和步骤2,直到整个序列有序。

冒泡排序的时间复杂度也为O(n^2),因此它也不适合对大规模数据进行排序。

插入排序

插入排序是一种高效的排序算法,它的基本思想是:

  1. 将待排序的序列看作一个有序序列和一个无序序列,其中有序序列为空。
  2. 从无序序列中取出第一个元素,并在有序序列中找到一个合适的位置将其插入。
  3. 重复步骤2,直到整个无序序列有序。

插入排序的时间复杂度为O(n^2),但在某些情况下,它的时间复杂度可以降至O(n)。

每日一题150解答

根据题目给出的序列(2,12,16,70,5,10),我们可以使用选择排序、冒泡排序或插入排序对其进行从小到大排序。

选择排序

def selection_sort(arr):
  for i in range(len(arr)):
    min_index = i
    for j in range(i+1, len(arr)):
      if arr[j] < arr[min_index]:
        min_index = j
    arr[i], arr[min_index] = arr[min_index], arr[i]

arr = [2, 12, 16, 70, 5, 10]
selection_sort(arr)
print(arr)

输出结果:

[2, 5, 10, 12, 16, 70]

冒泡排序

def bubble_sort(arr):
  for i in range(len(arr)):
    for j in range(0, len(arr)-i-1):
      if arr[j] > arr[j+1]:
        arr[j], arr[j+1] = arr[j+1], arr[j]

arr = [2, 12, 16, 70, 5, 10]
bubble_sort(arr)
print(arr)

输出结果:

[2, 5, 10, 12, 16, 70]

插入排序

def insertion_sort(arr):
  for i in range(1, len(arr)):
    key = arr[i]
    j = i-1
    while j >= 0 and key < arr[j]:
      arr[j+1] = arr[j]
      j -= 1
    arr[j+1] = key

arr = [2, 12, 16, 70, 5, 10]
insertion_sort(arr)
print(arr)

输出结果:

[2, 5, 10, 12, 16, 70]

因此,每日一题150的解答是:(2,5,10,12,16,70)。