Я пытаюсь реализовать такой сценарий на Java.
У меня есть ArrayList
["23","5","","","54","20","","","","0"]'
На данный момент список не отсортирован, я хочу, чтобы отсортировать его таким образом, что позиции пустых строк ""
поддерживаются.
Это означает, что пустые строки не сортируются, другие значения. Пример ArrayList
["0","5","","","20","23","","","","54"].
Обратите внимание, что позиция пустых строк (первоначально в позиции 2,3 и 6,7,8) сохраняется и сортировка выполняется только с непустыми значениями. Я использую Java, мне действительно понравятся некоторые идеи, чтобы начать реализацию этого требования. Я попробовал Google, но не смог найти этого.
Пожалуйста помоги,
Заранее спасибо.
Вероятно, вы захотите использовать что-то вроде этого:
import java.util.Arrays;
import java.util.LinkedList;
import java.util.TreeSet;
public class StringSort {
public static void main(String[] args) {
String[] numbers = new String[] {"23","5","","","54","20","","","","0"};
// Save the indices to be able to put the sorted numbers back in the array
LinkedList<Integer> indices = new LinkedList<>();
// Keep an ordered list of parsed numbers
TreeSet<Integer> set = new TreeSet<>();
// Skip empty entries, add non-empty to the ordered set and the indices list
for (int i = 0; i < numbers.length; i++) {
if (numbers[i].equals(""))
continue;
set.add(Integer.parseInt(numbers[i]));
indices.add(i);
}
// Put the ordered integers back into the array
for (int i : set) {
numbers[indices.pop()] = Integer.toString(i);
}
System.out.println(Arrays.toString(numbers));
}
}
Он работает в O (nlogn) времени из-за сортировки, но это выполнимо.
может быть, что-то вроде этого: (Кредиты Тому за его полезную ссылку)
String[] arr = new String[] { "23","5","","","54","20","","","","0" }; // the original array
boolean[] space = new boolean[arr.length]; // indicates whenever the index contains an empty space
String[] target = new String[arr.length]; // the reslted array
for (int i = 0; i < space.length; i++) // init spaces
{
space[i] = arr[i].isEmpty();
}
Arrays.sort(arr); // sort the original array
int index = 0;
for (int i = 0; i < arr.length; i++)
{
if (arr[i].isEmpty()) continue; // just a space ignore that
index = i; // real values start here
break;
}
for (int i = 0; i < space.length; i++)
{
if (space[i] == true)
{
target[i] = ""; // restore space
}
else
{
target[i] = arr[index]; index++;
}
}