排序 专题讨论

排序 专题讨论

排序 专题讨论

一.问题阐述

前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)。

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 第一章 语音信号处理概述

    第一章 语音信号处理概述一、语音交互语音交互(VUI:VoiceUserInterface)是指人与人或者人与设备通过自然语音进行信息传递的过程。语音交互的优势输入效率高:相对于键盘输入,语音输入的速度是传统输入方式的3倍以上(有权威统计分析得到的数据)。语音检索效率高;可跨空间,也称为远程语音交互,至少一米以上;指令可组合,比如:看一部周星驰的电影,评分8分以上。 解放双手和双眼,更安全:如车载系统的语音点播和语音导航场景(不可能一般用手开车,一边用手点播音乐);比如医疗场景,医生可以一边动手术,一边口语记录病.

    2022年5月9日
  • C++创建线程_C语言网络编程创建线程

    C++创建线程_C语言网络编程创建线程在window系统中编写控制台程序,创建线程使用CreateThread()函数创建,则线程函数必须申明为DWORDWINAPI;使用_beginthreadex()创建,则线程函数必须申明为unsignedintWINAPI;并需要设置环境:工程->设置->C/C++->CodeGeneration->Userun-timelibray->选DebugMultithr

    2022年8月30日
  • 计算机分子模拟聚乙烯,用“分子模拟”软件构建聚乙烯分子、全同立构聚丙烯分子,并计算它们末端的直线距离-高分子物理-实验1-01…

    计算机分子模拟聚乙烯,用“分子模拟”软件构建聚乙烯分子、全同立构聚丙烯分子,并计算它们末端的直线距离-高分子物理-实验1-01…高分子物理实验。实验一用“分子模拟”(MP)软件构建聚乙烯分子、全同立构聚丙烯,并计算它们末端的直线距离一、实验目的1.了解用计算机软件模拟大分子的“分子模拟”新趋势。2.学会用“分子模拟”软件构造聚乙烯、聚丙烯大分子。3.计算主链含100个碳原子的聚乙烯、聚丙烯分子末端的直线距离。二、实验原理已经知道,C-C单键是σ键,其电子云分布具有轴对称性。因此,σ键相连的两个碳原子可…

    2022年5月16日
  • 小程序bindtap传参_微信小程序bindtap

    小程序bindtap传参_微信小程序bindtap一边开发一边做点笔记,东西可能零散了点,一边开发一边补充。1、事件 1.bindtap绑定点击事件 2.bindinput监听输入,没输入一个字符得到一次返回值(就算是输入中文时,没敲一次键依然返回一次)2、解决小程序tabBar跳转不能带参数问题小程序这里遇到了一个难题就是如果实现tabBar栏之间的跳转的话是不能传入参数的那么我们要如何解决这个问题呢! 我的办法就是让你的传…

    2022年11月2日
  • 网上书城项目-LoadRunner压力测试

    网上书城项目-LoadRunner压力测试1.LoadRunner12.02安装教程及中文语言包安装2.如何使用loadrunner进行web网站性能测试3.解决loadrunner12版本中不显示监控图表的问题

    2022年7月18日
  • 一问彻底理解dubbo主流程

    一问彻底理解dubbo主流程

    2021年8月4日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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