排序 专题讨论

排序 专题讨论

排序 专题讨论

一.问题阐述

前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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 电脑apk文件怎么打开_python pkl文件

    电脑apk文件怎么打开_python pkl文件importpickledoc=open(r’D:\dataset\st_gcn_processed_data\data\NTU_RGB_D\xview\val_label.txt’,’a’)#打开一个存储文件,并依次写入test=open(r’D:\dataset\st_gcn_processed_data\data\NTU_RGB_D\xview\val_label.pkl’,’rb’)data=pickle.load(test)print(data,file=doc).

    2022年9月3日
    3
  • 怎么用matlab画心形曲线方程,matlab画心形曲线「建议收藏」

    怎么用matlab画心形曲线方程,matlab画心形曲线「建议收藏」Matlab绘制三维动态心形It’sOKtosendapicto…Matlab绘制三维动态心形It’sOKtosendapicto…(x,y1,’-r’,x,y2,’-.k’,’linewidth’,2)8、绘制心形图r=2(1-cosθ)的极坐标图形>>theta=[0:0.01:2*pi];>>polar(theta,…

    2022年10月16日
    0
  • Spring AOP 最热门面试题及答案「建议收藏」

    Spring AOP 最热门面试题及答案「建议收藏」译者的话前几天去京东面试,被问到AOP相关的问题,之前一直没有系统地学习相关的知识,答得不是很好。趁着假期,找了一下相关的资料,CSDN上有很多不错的文章,看了之后对AOP有比较好的理解了。然后Google了一下AOP相关面试题(AOPinterview),搜出来的第一条结果是一个叫HowToDoInJava的网站上的一篇文章TopSpringAOPIntervie…

    2022年8月11日
    5
  • Spring之Bean的装配[通俗易懂]

    Spring之Bean的装配[通俗易懂]Spring之Bean的装配

    2022年4月22日
    184
  • js 长轮询_websocket挂载到vue上

    js 长轮询_websocket挂载到vue上引入Web端即时通讯技术:即时通讯技术简单的说就是实现这样一种功能:服务器端可以即时地将数据的更新或变化反应到客户端,例如消息即时推送等功能都是通过这种技术实现的。但是在Web中,由于浏览器的限制,实现即时通讯需要借助一些方法。这种限制出现的主要原因是,一般的Web通信都是浏览器先发送请求到服务器,服务器再进行响应完成数据的现实更新。实现Web端即时通讯的方法:实现即时通讯主要有四种方式,它们分别…

    2022年10月14日
    0
  • class文件和dex文件「建议收藏」

    class文件和dex文件「建议收藏」Class文件1、什么是class文件能够被JVM识别,加载并执行的文件格式。2、class文件的生成![这里写图片描述](https://img-blog.csdn.net/20180817160829200?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RldmVsb3BBbmRyb2lk/font/5a6L5L2T/f…

    2022年6月27日
    27

发表回复

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

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