#java #algorithm #sorting
#java #алгоритм #сортировка
Вопрос:
Мне дали постановку задачи, которую мне нужно было отсортировать на основе их любовных ценностей соответствующих любовников.
Если значения любви одинаковы для двух влюбленных, сортирует их имя лексикографически и выбирает лексикографически меньшего любовника. Как это сделать?
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
class test
{
public static void bubble(String[] name,int[] a,int n)
{
// int n=a.length;
String temp_l;
String temps;
int[] name_l = new int[100000];
int temp;
for(int i=0;i<n-1;i )
{
//n-i-1 for ignoring the element which has already used in comparison
for(int j=0;j<n-i-1;j )
{
if(a[j]>a[j 1])
{
temp=a[j];
a[j] =a[j 1];
a[j 1]=temp;
//Sort them according to their name
temps=name[j];
name[j]=name[j 1];
name[j 1]=temps;
}
}
temp_l = name[i];
name_l[i]=temp_l.length();
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n=scan.nextInt();
int t=scan.nextInt();
String[] name= new String[100000];
int[] length= new int[1000000];
int[] love= new int[10000000];
for (int i=0;i<n ;i ) {
name[i]=scan.next();
love[i]=scan.nextInt();
}
bubble(name,love,n);
int[] name_l=new int[n];
String temp;
for (int i=0;i<n;i ) {
temp = name[i];
name_l[i]=temp.length();
}
//printing total t selection
int test = n-1;
for (int i=t;i>0;i--)
{
System.out.println(name[test]);
test--;
}
}
}
Пример ввода:
3 2
сурбхи 3
surpanakha 3
shreya 5
Мой вывод:
шрея
сурпанакха
Ожидаемый результат
шрея
сурбхи
Пожалуйста, помогите мне получить цель проблемы. Заранее спасибо.
Комментарии:
1. Подсказка: вам нужно проверить более одного условия, а не просто
if(a[j]>a[j 1])
включить дополнительный критерий сортировки, как описано в вашем домашнем упражнении…2. Подсказка no2: пожалуйста, не включайте все свое задание в свой вопрос. Нам просто нужно: ваш код, пример ввода, вывод… и где вы видите проблему. Таким образом: пожалуйста, обратитесь в справочный центр, чтобы понять, как задавать лучшие вопросы. И вместо того, чтобы записывать все назначение, вам лучше потратить свое время на форматирование кода. Потому что это то, что действительно важно, когда вы хотите, чтобы другие помогали вам!
3. Каким должен быть вторичный критерий сортировки, чтобы выполнить лексикографическую сортировку и выбрать лексикографически менее именованное слово.? @fabian@GhostCat
4. @DineshSonachalam Я добавил код, который вам нужно будет добавить. Пожалуйста, отметьте правильно и проголосуйте, если ваша проблема решена.
Ответ №1:
В вашем методе сортировки пузырьков вы должны добавить небольшой код, который будет меняться местами в случае равенства баллов.
for (int j = 0; j < n - i - 1; j ) {
if (a[j] > a[j 1]) {
temp = a[j];
a[j] = a[j 1];
a[j 1] = temp;
// Sort them according to their name
temps = name[j];
name[j] = name[j 1];
name[j 1] = temps;
}else if(a[j] == a[j 1]){
int result = name[j].compareTo(name[j 1]);
if(result < 0){
temps = name[j];
name[j] = name[j 1];
name[j 1] = temps;
}
}
}
Комментарии:
1. Я могу отсортировать его лексикографически, но, выбирая строки меньшей длины, я не получаю правильного вывода. [ссылка] ( ссылка )
2. Добавлено отсутствующее условие. (a[j] == a[j 1])) Теперь все должно работать нормально
3. he-s3.s3.amazonaws.com/media/hackathon/october-easy-16/problems/…
4. Выше приведены входные данные
5. Вывод he-s3.s3.amazonaws.com/media/hackathon/october-easy-16/problems/…