排序 专题讨论

排序 专题讨论

排序 专题讨论

一.问题阐述

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


相关推荐

  • 云服务器高io是什么_云主机购买

    云服务器高io是什么_云主机购买1:数据读取速度ucloud云主机最低224.8MB/S,最高508.8MB/S,平均410.7MB/S阿里云主机最低17.4MB/S,最高189.6MB/S,平均170.6MB/S万根云主机最低

    2022年8月3日
    6
  • JSP Include 文件方式

    JSP Include 文件方式两种方式JSPinclude文件有两种方式:1. 使用include标签,像  2.使用jsp:include标签,像              使用的差异在于:方式1比较适合引入一些静态的,比较少改动的内容;比如网页的header和footer的部分。方式2比较适合于引入改动较多的页面。

    2022年7月13日
    18
  • docker(1)下载安装for mac[通俗易懂]

    docker(1)下载安装for mac[通俗易懂]前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D

    2022年7月30日
    6
  • Ubuntu安装Redis及使用「建议收藏」

    Ubuntu安装Redis及使用「建议收藏」NoSQL简介NoSQL,全名为NotOnlySQL,指的是非关系型的数据库随着访问量的上升,网站的数据库性能出现了问题,于是nosql被设计出来优点/缺点优点:高可扩展性分布式计算低成本架构的灵活性,半结构化数据没有复杂的关系缺点:没有标准化有限的查询功能(到目前为止)最终一致是不直观的程序分类类型部分代表特点列存储H…

    2025年11月20日
    5
  • 西班牙语语法【2 : 动词】

    西班牙语语法【2 : 动词】时态时态描述陈述式_现在时陈述式_简单过去时陈述式_过去未完成时陈述式_将来未完成时陈述式_过去完成时陈述式_现在完成时陈述式_将来完成时虚拟式_现在时虚拟式_过去时条件式_过去将来时过去将来完成时…

    2022年6月10日
    31
  • ElasticSearch join连接查询「建议收藏」

    ElasticSearch join连接查询「建议收藏」ElasticSearchjoin连接查询特别说明:文章所有内容基于ElasticSerch5.5.3版本ElasticSerch的连接查询有两种方式实现nestedparent和child关联查询nested存储结构nested的方式和其他字段一样,在同一个type里面存储,以数组的方式存储在type里,格式如下:PUTindex…

    2022年6月16日
    78

发表回复

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

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