求数组中第K个最大的值

来源:互联网 发布:网络平台服务协议 编辑:程序博客网 时间:2024/05/16 08:41

方法1:冒泡

public static void main(String[] args)    {        int k=6;        int[] group={0,1,7,3,21,56,95,12,34,43,6,0};        int N=group.length;        for(int i=1;i<=N-1;i++)        {            for(int j=N-1;j>i;j--)            {                if(group[j-1]<group[j])                {                    int tmp;                    tmp=group[j];                    group[j]=group[j-1];                    group[j-1]=tmp;                }            }        }        for(int x=1;x<=N-1;x++)        {            printnb(group[x]+"  ");        }        print("");        print(group[k]);

输出:
95 56 43 34 21 12 7 6 3 1 0
12

方法2:先将数组前k个数进行排序(递减),然后遍历数组中k+1到N位数…如果这个数小于gk则不做操作,如果大于的话,将会删除当前g[k],将这个数添加到g中,然后排好顺序(逆序)

public class H{       public static void main(String[] args)    {        int k=6;        int[] group={0,1,7,3,21,56,95,12,34,43,6,0};        int N=group.length;        for(int i=1;i<=k;i++)        {            for(int j=k;j>i;j--)            {                if(group[j-1]<group[j])                {                    int tmp=group[j];                    group[j]=group[j-1];                    group[j-1]=tmp;                }            }        }        print("将前"+k+"个数排序后:");        for(int x=1;x<=k;x++)        {            printnb(group[x]+"  ");        }        print("");        for(int v=k;v<=N-1;v++)//遍历k以后的数        {            if(group[v]>group[k])//若存在group[v]>            {                for(int u=1;u<k;u++)//插入衡却位置                {                    int flag=0;                    if(group[v]>group[u])                    {                        int haha=group[v];                        int pupu=k;                        while(pupu>u)                        {                            group[pupu]=group[pupu-1];                            pupu--;                        }                        group[u]=haha;                        break; //此处可以直接跳出for                    }                }            }        }        print(group[k]);    }                  }

输出:
95 56 21 7 3 1
12

注意这里:

    public static void main(String[] args)    {        int a=1;        for(int i=1;i<=10;i++)        {            print(i);            if(a==1)            {                break;               }        }    }   

输出:
1

可以证明,break不是跳出if而是外面的for

原创粉丝点击