从键盘读入大小无序的2000个整数并已建立顺序表。 请用时间复杂度最低的算法挑选出最大的前20个整数并打印

题目

从键盘读入大小无序的2000个整数并已建立顺序表。
请用时间复杂度最低的算法挑选出最大的前20个整数并打印(模仿堆排序的思想)

代码

#include <iostream>
using namespace std;
typedef int ElemType;

//将元素k为根的子树进行调整
void HeadAdjust(ElemType A[],int k,int len){
    A[0]=A[k];  //暂存子树结点的值
    for(int i=2*k;i<=len;i*=2){ //沿key较大的子结点向下筛选
        if(i<len&&A[i]<A[i+1])  //表明右孩子比左孩子的值大
            i++;
        if(A[0]>=A[i])
            break;  //根结点本身就是最大的,不用往下再比了,筛选结束
        else{       //孩子比根结点大,则进行交换
            A[k]=A[i];
            k=i;        //修改k的值继续往下筛选
        }
    }
    A[k]=A[0];     //筛选结束,将值放在最终位置
}
//初始建堆  大根堆
void BuildMaxHeap(ElemType A[],int len){
    for(int i=len/2;i>0;i--)    //从最后一个非叶子结点开始调整
        HeadAdjust(A,i,len);
}
//堆排序
void HeapSort(ElemType A[],int len){
    BuildMaxHeap(A,len);    //初始建堆
    for(int i=len;i>1;i--){
        cout<<A[1]<<" ";
        swap(A[i],A[1]);
        HeadAdjust(A,1,i-1);
    }
}

int main() {
    ElemType A[11]={0,4,2,1,6,3,3,9,7,2,1}; //第0个位置不用
    HeapSort(A,11);
    
    return 0;
}

实现效果

代码的实现就是对一组数据进行排序,而不是实现输出前几个数,若想输出前几个数,可以对堆排序实现几次调整就行了
在这里插入图片描述

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 好的,以下是使用Python语言实现读入n值及n个整数建立顺序表并遍历输出的示例代码: ```python n = int(input("请输入整数个数n:")) nums = [] for i in range(n): num = int(input("请输入第{}个整数:".format(i+1))) nums.append(num) print("顺序表为:", nums) print("遍历顺序表输出:") for num in nums: print(num, end=" ") ``` 这段代码先读入一个整数n,然后使用一个for循环读入n个整数并添加到一个列表nums中,最后分别输出顺序表和遍历顺序表输出的结果。 ### 回答2: 建立顺序表是一种常用的数据存储结构,通过这种结构可以对一组数据进行快速的查找、插入、删除等操作。 要建立一张顺序表,我们需要先读入n值以及n个整数。接着,我们再定义一个大小为n的数组,将这n个整数依次存放到数组中。这样就形成了一个包含n个元素的顺序表。 接下来,我们可以通过遍历这个顺序表来输出其中的所有元素。遍历可以使用循环语句来实现,从第一个元素开始依次输出,直到遍历完所有的元素为止。输出可以使用print()函数来实现。 下面是用Python语言实现建立顺序表及遍历输出的例子代码: ``` n = int(input("请输入n值:")) data = [] for i in range(n): num = int(input("请输入第" + str(i+1) + "个整数:")) data.append(num) print("建立顺序表为:", data) print("顺序表遍历输出为:") for i in range(n): print(data[i], end=" ") ``` 在运行这段代码时,程序会首先提示输入n值,然后依次读入n个整数,并将其存放到一个名为data的列表中。接着,程序会输出建立顺序表,并通过循环遍历这个顺序表,输出其中的每一个元素。最终,我们可以看到在屏幕上输出了这n个整数的列表形式以及每个整数的具体值。 总之,建立顺序表并遍历输出是一个基础的编程问题,掌握这个问题可以帮助我们更好地理解顺序表的操作方法,提高编程能力。 ### 回答3: 顺序表是一种基本的数据结构之一,在计算机中的应用非常广泛。顾名思义,顺序表是用一个一维数组来存储一组元素的线性结构,它们按照用户定义的顺序存储在数组中。顺序表的优势在于它可以通过数组的索引直接访问元素,因此,查找、插入和删除元素都非常高效。本文将介绍如何读入n值及n个整数,并创建一个顺序表。 首先,读入n值及n个整数。假设用户输入的n值为5,输入的n个整数为1、2、3、4和5。我们可以使用以下代码来读取这些输入: ``` #include <iostream> using namespace std; int main() { int n, a[100]; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } return 0; } ``` 在上面的代码中,声明了一个整数n和一个大小为100的整数数组a。然后,通过 `cin` 语句读取n的值,并使用循环语句读取n个整数,并将它们存储在数组a中。注意,循环变量i的范围是从0到n-1,因为数组下标从0开始。 接下来,我们可以使用顺序表来存储这些整数。我们可以定义一个结构体来表示顺序表,并在结构体中定义一个指向整数数组的指针和一个表示当顺序表的元素个数的整数。以下是一个示例: ``` struct SeqList { int *data; int length; }; ``` 现在,我们可以使用以下代码来创建一个顺序表,并将输入的整数存储在其中: ``` #include <iostream> using namespace std; struct SeqList { int *data; int length; }; int main() { int n, a[100]; SeqList list; cin >> n; list.data = a; list.length = n; for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < list.length; i++) { cout << list.data[i] << " "; } return 0; } ``` 在上面的代码中,我们通过声明一个SeqList类型的结构体变量list来创建一个顺序表。然后,我们将整数数组a赋给顺序表的data指针,并将n赋给顺序表的length变量。最后,我们可以使用循环输出顺序表中的每个整数,来验证我们的顺序表是否正确建立。输出结果应该为: 1 2 3 4 5 以上就是如何读入n值及n个整数建立顺序表并遍历输出的方法。顺序表是一种非常基础的数据结构,它的用途非常广泛,特别是在算法数据结构领域。为了更好地理解顺序表,欢迎大家自行实现该算法练习。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韭菜盖饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值