数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用( )算法最节省时间.为啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用( )算法最节省时间.为啥?相关的知识,希望对你有一定的参考价值。

A.冒泡排序 B.快速排序 C.简单选择排序 D.堆排序

数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用堆排序最节省时间。

堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点;在堆的数据结构中,堆中的最大值总是位于根节点(在优先队列中使用堆的话堆中的最小值位于根节点)。

扩展资料:

堆排序的基本思想是将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。

将堆顶元素与末尾元素进行交换,使末尾元素最大。然后继续调整堆,再将堆顶元素与末尾元素交换,得到第二大元素。如此反复进行交换、重建、交换。

参考资料来源:

百度百科-快速排序算法

参考技术A

选堆排序。

看到节省时间,就想到快排,但是这里数据特别多?!那就得想到堆排序。因为快排期望时间复杂度为O(nlogn)最坏为O(n^2),而堆排序是严格O(nlogn),所以相比之下,本题选D堆排序。

参考技术B D
O(nlogk)本回答被提问者采纳

c语言:3*4的矩阵,编程序求出其中最大的那个元素的值,以及其所在的行号和列号。(打擂台算法)

有一个3*4的矩阵,要求编程序求出其中最大的那个元素的值,以及其所在的行号和列号。(打擂台算法)

解:程序:

#include<stdio.h>

int main()

{

int i, j, row = 0, colum = 0, max;

int a[3][4] = { { 1,2,3,4 },{ 4,5,6,7 },{-1,3,-5,10} };

max = a[0][0];

printf("array a:\n");

for (i = 0; i <= 2; i++)

{

for (j = 0; j <= 3; j++)

{

printf("%5d", a[i][j]);

}

printf("\n");

}

for (i = 0; i <= 2; i++)

{

for (j = 0; j <= 3; j++)

{

if (a[i][j] > max)

{

max = a[i][j];

row = i;

colum = j;

}

}

}

printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);

return 0;

}

结果:

array a:

    1    2    3    4

    4    5    6    7

   -1    3   -5   10

max=10

row=2

colum=3

请按任意键继续. . .


本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1746397

以上是关于数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用( )算法最节省时间.为啥?的主要内容,如果未能解决你的问题,请参考以下文章

有一个3X4的矩阵,要求编写程序求出其中值最大的那个元素的值,以及其所在的行号和列号

有一个3*4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号

hiho #1502:最大子矩阵(元素和不超过k)

有一个n*n的矩阵,要求编一程序求出其中每行元素的最大值并将其存放在一个一维数组当中。用c语言编程

面试题-10亿个数中找出最大的10000个数(top K问题)

c语言:3*4的矩阵,编程序求出其中最大的那个元素的值,以及其所在的行号和列号。(打擂台算法)