对1000000个数进行排序找出10个最大的数---后记1

原创 2006年06月13日 17:29:00
前几天的那个问题本问题“对1000000个数进行排序找出10个最大的数”也可以用插入排序或选择排序,对于选择排序在目标数中每次选择最大的数,与前面的10个数进行交换,大约需O(10*n)的时间消耗。如下算法:
void InsertSort(long data[], long count)
{
    /*
    *    在count个数中找到最大的数,与第0个进行交换,然后再在后count-1中找到最大的,与
    *    第1个进行交换,依此类推,直到前10个数都与相应的数交换完毕,输出前10个数就行了,
    *    这就是选择排序的一部分,不过同快速排序和堆排序一样却破坏了原来的data[]。
    */
    long temp, num = 0;    // num统计运行的次数
    long i = 0, j = 0, k = 0;    // 用k纪录data的前10位数
    for (i = 0; i < 10; i++)
    {
        ++num;
        temp = data[k];    // data[k]作为监视哨
        for (j = i; j < count; j++ )
        {
            ++num;
            if (data[k] < data[j])
            {
                data[k] = data[j];
            }
        }
        data[j] = temp;    // 交换到位
        k++;    // 下一个
    }
}

相关文章推荐

(算法)从10000个数中找出最大的10个

从10000个整数中找出最大的10个,最好的算法是什么? 算法一:冒泡排序法   千里之行,始于足下。我们先不说最好,甚至不说好。我们只问,如何“从10000个整数中找出最大的10个”?我...

从数据文件f1.dat中读入10个整数放在数组中,找出并输出10个数中的最大者和它在数组中的序号。

// 121216 文件处理2.cpp : 定义控制台应用程序的入口点。 // /* * Copyright (c) 2012, 烟台大学计算机学院 * All ...

找出1---1000000内的完全数--不要到死循环里

找出10个最大的文件并排序

当磁盘空间不够的时候,我们需要删除一些比较大的文件。如何找到这些大文件呢?下面的代码能够帮你实现import java.io.File; import java.util.ArrayList; imp...

如果给定一个数组arr[0,...N-1],要求找出相邻两个数的最大差值

如果给定一个数组arr[0,...N-1],要求找出相邻两个数的最大差值      题目:      如果给定一个数组arr[0,...,N-1],要求找出相邻两个数的最大差值。    ...

长度为n的整形数组,找出其中的任意n-1个数乘积最大的那一组

问题描述:长度为n的整形数组,找出其中的任意n-1个数乘机最大的那一组,可以用乘法,但不能用除法,要求对算法处理的 时间复杂度和空间复杂度做出分析。 方法一: 首先能想到的一般方法就...
  • hxwab
  • hxwab
  • 2016年03月25日 17:36
  • 228

N个数中找出最大的K个数

题目描述: 有很多个(N个)无序的数,我们姑且假定它们各不相等,怎么选出其中最大的若干个(k个)数呢? 1.N=100, K = 10的时候怎么处理? 2. N=1000, K = 100呢? ...

【海量数据处理】N个数中找出最大的前K个数

N个数中找出最大的前K个数,需要用小堆实现。分析:由于小堆的堆顶存放堆中最小的数据,可以通过与堆顶数据进行比较,将大数据存放在堆中,注意在每次改变堆顶数据后,进行调堆,使堆顶一直存放整个堆中最小元素。...
  • Scenlyf
  • Scenlyf
  • 2016年06月11日 18:53
  • 199
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对1000000个数进行排序找出10个最大的数---后记1
举报原因:
原因补充:

(最多只允许输入30个字)