数组循环左移算法实验报告

课程设计题目:用 Reverse 实现时间复杂度为 O ( n ) O(n) O(n) 数组循环左移算法

一、问题描述

设计一个时间复杂度为 O ( n ) O(n) O(n) 的算法,实现将数组 A[n] 中所有元素循环左移 k k k 个位置。

详见王红梅等编著的《数据结构(C++版)(第2版)》P53页习题5(1)。

二、基本要求

  1. 实现将数组 A[n] 中所有元素循环左移 k k k 个位置。

  2. 时间复杂度为 O ( n ) O(n) O(n)

三、概要设计

1. 算法的设计

算法思路参考王红梅等编著的《数据结构(C++版)(第2版)》P16页思想火花,出自BW Kernighan和PJ Plauger于1981年发表的著作Software tools in Pascal

  1. 设计reverse(first, last)函数,用于实现反转从firstlast(不含)之间的元素;

  2. 通过3次reverse实现将数组 A[n] 中所有元素循环左移 k k k 个位置:

    reverse(a, a + k)

    reverse(a + k, a + n)

    reverse(a, a + n)

四、详细设计

1. 设计每个函数

void Reverse(int *first, int *last)
{
    last--;
    for (int temp; first < last; first++, last--)
        temp = *first, *first = *last, *last = temp;
}

2. 设计主函数

int main()
{
    reverse(a, a + k);
    reverse(a + k, a + n);
    reverse(a, a + n);
}

五、运行与测试

1. 测试环境

运行环境:Windows 20H2, i7-9750H @ 2.60GHz, 16GB RAM

编译器:gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

编译命令:-g

运行终端:cmd

2. 在调试程序的过程中遇到的问题与解决方案

暂未发现异常。

3. 设计的测试数据与测试结果

测试3次。输入k,然后生成一个随机数组并输出,数组所有元素循环左移 k k k</

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值