正在载入在线练习界面,本页内容可直接阅读…

AK CSP › CSP-J 2020 第一轮真题 › 第 5 题

CSP-J 2020 第一轮 第 5 题:冒泡排序最少比较次数

单项选择 · 排序算法 · 难度 中等 · 答案 C

题目

冒泡排序算法的伪代码如下:

输入:数组L, n ≥ k。输出:按非递减顺序排序的 L。
算法 BubbleSort:
   1. FLAG ← n //标记被交换的最后元素位置
   2. while FLAG > 1 do
   3.     k ← FLAG -1
   4.     FLAG ← 1
   5.     for j=1 to k do
   6.         if L(j) > L(j+1) then do
   7.              L(j)  ↔ L(j+1)
   8.              FLAG ← j

对 $n$ 个数用以上冒泡排序算法进行排序,最少需要比较多少次?( )。
CSP-J 2020 第一轮 第 5 题 原题
原题扫描(页面加载后可直接在线作答)

选项

  • A. $n^2$
  • B. $n-2$
  • C. $n-1$
  • D. $n$

答案

C

题解

选 C.\(n-1\)。

最好的情况是数组一开始就已经按非递减顺序排列。

  • 初始 FLAG = n,进入第一轮,令 k = n-1、FLAG = 1。
  • for 循环中,j 从 \(1\) 到 \(n-1\),共进行 \(n-1\) 次相邻元素比较。
  • 因为数组已有序,不发生交换,FLAG 始终为 \(1\),因此 while 循环结束。

所以最少需要比较 \(\boxed{n-1}\) 次。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号