如何从数组中分离负数和正数?

时间:2016-03-07 03:09:05

标签: java arrays algorithm big-o

我想在数组中分隔负数和正数。

例如,如果我的数组有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]+" ");
        }

    }
}

2 个答案:

答案 0 :(得分:0)

您只需要一个j--,因此请删除其中一个。

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

答案 1 :(得分:-1)

您可以将以下内容视为执行否定/肯定分区的替代方法。这是基于K&amp; R的快速排序,但只对阵列进行一次传递:

    <?php
    $name = $_GET["name"];//get the name parameter
    $people = file("singles.txt", FILE_IGNORE_NEW_LINES);//load the data from singles.txt
    ?>

    <h1>Matches for <?= $name ?></h1>        
    <?php 
    foreach($people as $person) {
        list($person_name, $gender, $age, $type, $os, $min, $max) = explode(",", $person);
        if($person_name == $name) {
            foreach($people as $match) {
                list($match_name, $match_gender, $match_age, $match_type, 
            $match_os, $match_min, $match_max) = explode(",", $match);
                if($gender != $match_gender && $os == $match_os && $match_min <= $age && 
            $match_max >= $age && $min <= $match_age && $max >= $match_age && similar_text ($type, $match_type) >= 1) {
    ?>