排序 专题讨论

排序 专题讨论

排序 专题讨论

一.问题阐述

前K大问题

从一组元素(n个)中找出前K大个元素

二.解决思路

1.先将n个元素按照从小到大进行排序。

2.然后将排序好的数组从后输出K个元素。

三.关键过程

如何将n个元素进行排序?

代码如下:

void Sort(int* arr, int n)
{
    int i=0;
    int position=-1;
    while(i<n)
    {
        if(i==0||arr[i-1]<=arr[i])
        {
            if(position==-1)
            {
                i++;
            }
            else{
                i=position+1;
                position=-1;
            }
        }else{
             if(position==-1)
            {
                position=i;
            }
            int tmp=arr[i];
            arr[i]=arr[i-1];
            arr[i-1]=tmp;
            i--;
        }
    }
}

四.分析

代码中的position是用来记录交换时,当前元素的下标。

当前面的元素整理完成,i 可以直接跳到 position+1,减少循环次数。

举例:

[5, 3, 2, 4]

cmp 5 3

change -> [3, 5, 2, 4]

position 为 1

jump 2 #这里jump的位置是position+1

cmp 5 2

change -> [3, 2, 5, 4]

cmp 3 2

change -> [2, 3, 5, 4]

jump 2

cmp 3 5

cmp 5 4

change -> [2, 3, 4, 5]

cmp 3 4

jump 4

运行代码截图:

排序 专题讨论
排序 专题讨论

最好循环执行次数为n,最坏为n(n+1)/2。

所以最好的时间复杂度为O(n),最坏为O(n^2)。

五.拓展

这个问题和PTA 7-5 选做 寻找大富翁 考核的差不多

所以用这个排序进行测试。

排序 专题讨论
排序 专题讨论

六.结论

这个排序算法比较简单,比较稳定,容易理解,有点类似与插入排序,但是将一个数放入其正确位置的交换同冒泡排序(一系列交换)

简单,只有一层循环,最好的时间复杂度为O(n),最坏为O(n^2)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114446.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 描述性统计的matlab实现

    描述性统计的matlab实现

    2021年11月21日
  • jmeter性能测试步骤入门_jmeter接口性能测试

    jmeter性能测试步骤入门_jmeter接口性能测试原文转自:https://blog.csdn.net/lovesoo/article/details/78579547ApacheJMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。本文为JMeter性能测试完整入门篇,从Jmeter下载安装到编写一个完整…

  • CSS3自定义滚动条样式 -webkit-scrollbar「建议收藏」

    CSS3自定义滚动条样式 -webkit-scrollbar「建议收藏」有没有觉得浏览器自带的原始滚动条很不美观,同时也有看到很多网站的自定义滚动条显得高端,就连chrome32.0开发板都抛弃了原始的滚动条,美观多了。那webkit浏览器是如何自定义滚动条的呢?前言webkit支持拥有overflow属性的区域,列表框,下拉菜单,textarea的滚动条自定义样式,所以用处还是挺大的。当然,兼容所有浏览器的滚动条样式目前是不存在的。演示

    2022年10月30日
  • Linux移植之移植步骤

    Linux移植之移植步骤在这里总结一下我在移植Linux2.6.22.6内核过程时的步骤。移植成功后最终能挂接做好的根文件系统,并且启动第一个init程序。移植的步骤如下:1、将网上下载的内核源码文件linux-2.6.2

  • intellij idea安装教程_intellij idea2021安装教程

    intellij idea安装教程_intellij idea2021安装教程下载第一步:打开官网:http://www.jetbrains.com/idea/,点击页面中的“DOWNLOAD”第二步:根据自己的需要选择下载的IntelliJIDEA版本。Communit

  • MDK5 (Keil5)注册机破解[通俗易懂]

    MDK5 (Keil5)注册机破解[通俗易懂]下载个破解注册机网上到处都是!   1、以管理员身份定位打开KeiluVision5软件   2、打开后如下操作        3、显示如下,图中箭头空白说明未破解过            4、运行上面的注册机 将下面的ComputerID复制到打…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号