-2

未排序的数组和整数 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;
    }

}
4

3 回答 3

0

重新排列数组中的元素,使所有小于或等于 k ​​的元素排在任何大于 k 的元素之前。

  • 问题不需要对数组进行排序
  • Arrays.sort()很方便,但它不必要地把O(n)问题变成了O(nlogn)问题
  • 直截了当的解决方案是 time:O(n)和 space O(n),即准备一个与输入数组大小相同的空数组,然后循环遍历输入数组,如果是element <= k,则将其从左侧放入空数组,否则从右侧放入.
  • 它可以通过时间O(n)和空间来完成O(1),(就地搬迁),这样的事情可能会给你结果:

a将是int[]数组,而kk您的问题)

    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);
            }
        }
    }
于 2013-10-03T15:51:42.537 回答
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);
        }
    }
}
于 2013-10-03T15:22:06.377 回答
0

Arrays.sort(yourIntArray)将是显而易见的选择。

于 2013-10-03T14:58:15.397 回答