Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建对数组排序的方法_Java_Arrays_Sorting - Fatal编程技术网

Java 创建对数组排序的方法

Java 创建对数组排序的方法,java,arrays,sorting,Java,Arrays,Sorting,未排序数组和整数k,创建一个方法,重新排列数组中的元素,使所有小于或等于k的元素位于任何大于k的元素之前 这是我的代码,它不起作用 public class SmallerFirst { public int[] sort(int[] a, int k) { if(a.length == 1) { return a; } if(a.length == 0) {

未排序数组和整数k,创建一个方法,重新排列数组中的元素,使所有小于或等于k的元素位于任何大于k的元素之前

这是我的代码,它不起作用

public class SmallerFirst
{
    public int[] sort(int[] a, int k) 
    {

        if(a.length == 1)
        {
            return a;
        }

        if(a.length == 0)
        {
            return a;
        }

        else
        {
            int last = (a.length-1);
            for(int pos=0; pos<a.length; pos++)
            {
                for(int x=1;x>0;x++)
                {
                    if(last == 0)
                    {
                        break;
                    }
                    if(a[pos] > k)
                    {
                        swap(a,pos,last); last--; continue;
                    }           
                    else
                    {
                        break;
                    }
                }       
            }
            return a;
        }
    }

    public void swap(int[] a,int p1,int p2)
    {
        int temp = 0;
        temp = a[p2];
        a[p2] = a [p1];
        a[p1]=temp;
    }

}
公共类SmallerFirst
{
公共整数[]排序(整数[]a,整数k)
{
如果(a.length==1)
{
返回a;
}
如果(a.length==0)
{
返回a;
}
其他的
{
int last=(a.length-1);
用于(int pos=0;pos0;x++)
{
如果(最后==0)
{
打破
}
如果(a[pos]>k)
{
交换(a,pos,最后);最后--;继续;
}           
其他的
{
打破
}
}       
}
返回a;
}
}
公共无效掉期(int[]a、int p1、int p2)
{
内部温度=0;
温度=a[p2];
a[p2]=a[p1];
a[p1]=温度;
}
}

数组。排序(yourntarray)
将是显而易见的选择。

这应该可以满足您的需要

public static void sort(int[] a, int k) {
    if(a.length > 1) {
        int last = (a.length-1),
            first = 0;
        while(last > first) {
            if(a[first] <= k) first++;
            else if(a[last] > k) last--;
            else swap(a, first, last);
        }
    }
}
公共静态无效排序(int[]a,int k){
如果(a.长度>1){
int last=(a.length-1),
第一个=0;
while(最后一个>第一个){
如果(a[第一]k)最后--;
else交换(a、第一个、最后一个);
}
}
}
重新排列数组中的元素,使所有元素小于或等于 等于k的元素排在大于k的元素之前

  • 问题不需要对数组进行排序
  • Arrays.sort()
    很方便,但它不必要地将
    O(n)
    问题变成了
    O(nlogn)
    问题

  • 简单的解决方案是,时间:
    O(n)
    和空间
    O(n)
    ,也就是说,准备一个与输入数组大小相同的空数组,然后在输入数组中循环,如果
    元素是类项目,请尝试自己求解。否则使用Arrays.sort(…):)或查看Arrays.sort的代码是否需要保存它们的显示顺序?像
    [1,3,5,2,10]k=4
    导致
    [1,3,2,5,10]
    为(int x=1;x>0;x++)
    什么?我认为他依赖于
    break
    语句。
    x
    仍然未使用。。。丑陋,不是最有效的方式,我猜,这会对整个数组进行排序,但op我猜对元素1211,9,7,12,20,17,19没问题,我并没有声称提供了最有效的方式,但可能是最简单的:)
        int p = -1; // flag pointer
        int w = 0; // working pointer
    
        for (; w <= a.length - 1; w++) {
            if (a[w] <= k) {
                p++;
                if (w != p) {
                    swap(a, p, w);
                }
            }
        }