重新排列数据数组而不使用临时数组

时间:2011-11-24 21:02:48

标签: arrays permutation

如果我知道在不使用临时数组的情况下将每个元素放在数组中的哪个位置,我如何重新排列数组?

我猜,这与循环排列有关,但我无法弄清楚它们是如何相互联系的。 Wiki页面似乎与我无关(http://en.wikipedia.org/wiki/Cyclic_permutation)

4 个答案:

答案 0 :(得分:1)

如果您知道将每个元素放在数组中的位置,以及该数组的哪个元素属于特定索引,那么您可以使用该信息来优化重新排列。否则,您可以迭代所有数组元素,将它们交换到正确的位置,直到它们都正确放置。

void permuteObjects(Object[] elements, int[] positions)
{
  for (int i = 0; i < elements.length; ++i) {
    while (positions[i] != i) {
      swapObjects(elements, i, positions[i]);
      swapIntegers(positions, i, positions[i]);
    }
  }
}

答案 1 :(得分:0)

如果您可以将阵列的“重新排列”归结为单个排列,即交换两个元素的值,那么您可以使用XOR to perform the swap without additional variable

这是来自链接维基百科文章的示例代码:

 void xorSwap (int *x, int *y) {
     if (x != y) {
         *x ^= *y;
         *y ^= *x;
         *x ^= *y;
     }
 }

答案 2 :(得分:0)

为什么不使用临时数组并通过将其设置为null来终止它?

也许看看http://docs.oracle.com/javase/1.4.2/docs/api/java/util/HashMap.html
添加新项目时,HashMaps会动态增加 使用方法如下:
HashMap<Integer, WhatEverYouWantToStore> = new HashMap<Integer, WhatEverYouWantToStore>();

答案 3 :(得分:0)

也许试试这个:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class sort {

        public static void main(String[] args) {
                List list = new ArrayList();
                String country[] = { "India", "Japan", "USA", "UK", "Nepal" };
                for (int i = 0; i < 5; i++) {
                        list.add(country[i]);
                }
                Collections.sort(list);
                Iterator i = list.iterator();

                while (i.hasNext()) {
                        System.out.print(i.next() + "\t");
                }
        }
}