Я прочитал в списке строк, которые представляют собой число в различных форматахСортировать список BigDecimals разбираемого из строк, в то время как maintainig порядка чисел, где значения равны
Я разбор этих чисел BigDecimals и сортировка их.
Затем я распечатываю номера в исходном формате.
Проблема в том, что мне необходимо поддерживать порядок чисел, которые не совпадают, что не происходит в моем текущем коде.
import java.math.BigDecimal;
import java.util.*;
class Solution{
public static void main(String []args){
//Input
Scanner sc= new Scanner(System.in);
int n=sc.nextInt();
String []s=new String[n+2];
for(int i=0;i<n;i++){
s[i]=sc.next();
}
sc.close(); for (int i = 0; i < n -1; i++) {
for (int k = (i + 1); k < n; k++) {
if (new BigDecimal(s[i]).compareTo(new BigDecimal(s[k])) < 0) {
String tempValue = s[i];
s[i] = s[k];
s[k] = tempValue;
}
}
}
Входной
9
-100
50
0
56.6
90
0.12
.12
02.34
000.000
Выход
90
56.6
50
02.34
.12
0.12 (Wrong order here)
0
000.000
-100
Ожидаемый результат
90
56.6
50
02.34
0.12
.12
0
000.000
-100
Решение
for (int i = 0; i < n; i++) {
for (int j = 1; j < (n - i); j++) {
String temp="";
if(new BigDecimal(s[j-1]).compareTo(new BigDecimal(s[j])) < 0) {
temp = s[j-1];
s[j-1] = s[j];
s[j] = temp;
}
}
Вам необходимо изменить свой вопрос. Во-первых, вы разбираетесь в 'BigDecimal', а не' BigInteger'. Кроме того, вы хотите сохранить порядок предметов, которые * равны *, а не * четные *. Говоря о цифрах, «четные» и «равные» имеют совершенно разные значения. Наконец, то, о чем вы просите, называется [стабильный сорт] (http://www.geeksforgeeks.org/stability-in-sorting-algorithms/). Ваш выбор сортировки не является стабильным. Вы должны заменить его другим алгоритмом. Оба сортировки вставки и сортировка пузырьков стабильны и легко кодируются как сортировка. –