簡體   English   中英

如何從數組中分離負數和正數?

[英]How to separate negative numbers and positive numbers from an array?

我想將數組中的負數和正數分開。

例如,如果我的數組有 10 個值並且它們是 {-8,7,3,-1,0,2,-2,4,-6,7},我希望新修改的數組為 {-6, -2,-1,-8,7,3,0,2,4,7}。

我想在 O(n^2) 中做到這一點,我也寫了一個代碼。 但我沒有得到正確的輸出。 我的代碼哪里錯了?

import java.util.Random;
public class Apples {

    public static void main(String[] args) {
        Random randomInteger=new Random();
        int[] a=new int[100];
        for(int i=0;i<a.length;i++)
        {
            a[i]=randomInteger.nextInt((int)System.currentTimeMillis())%20 - 10;
        }
        for(int i=0;i<a.length;i++)
        {
            if(a[i]<0)
            {
                int temp=a[i];
                for(int j=i;j>0;j--)
                {
                    a[j]=a[j-1];
                    j--;
                }
                a[0]=temp;
            }
        }
        for(int i=0;i<a.length;i++)
        {
            System.out.print(a[i]+" ");
        }

    }
}

你有兩個j--而你只需要一個,所以刪除其中一個。

for(int j=i;j>0;j--)
 {
     a[j]=a[j-1];
     // remove j--; from here
 }

您可能會考慮將以下內容作為進行否定/肯定划分的替代方法。 這是基於 K&R 的快速排序,但只對數組進行一次傳遞:

import java.util.Random;

public class Sweeper {   
   public static void printArray(int[] a) {
      for (int elt : a) {
         System.out.print(elt + " ");
      }
      System.out.println();
   }

   public static void swap(int[] a, int i, int j) {
      int tmp = a[i];
      a[i] = a[j];
      a[j] = tmp;
   }

   public static void partition(int[] a, int target) {
      int last = 0;
      for (int i = 0; i < a.length; ++i) {
         if (a[i] < target && i != last) swap(a, i, last++);
      }
   }

   public static void main(String[] args) {
      Random rng = new Random();
      int[] a = new int[20];
      for (int i = 0; i < a.length; i++) {
         a[i] = rng.nextInt(20) - 10;
      }
      printArray(a);
      partition(a, 0);
      printArray(a);
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM