创建一个排序数组的方法

时间:2013-10-03 14:54:30

标签: 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)
        {
            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;
    }

}

3 个答案:

答案 0 :(得分:0)

Arrays.sort(yourIntArray)将是明显的选择。

答案 1 :(得分:0)

这应该做你想要的事情

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);
        }
    }
}

答案 2 :(得分:0)

  

重新排列数组中的元素,使所有元素小于或   等于k来自任何大于k的元素。

  • 问题不需要对数组进行排序
  • Arrays.sort()非常方便,但不必要地将O(n)问题转变为O(nlogn)问题
  • 直截了当的解决方案是,时间:O(n)和空格O(n),也就是说,您准备一个空数组,大小与输入数组相同,然后循环输入数组,如果{{1将它从左边放入空数组,否则从右侧放入。
  • 可以通过时间element <= k和空间O(n)完成,(就地重新定位),这样的事情可能会给你结果:

O(1)将是a数组,int[]是问题中的k

k