2014-01-05 8 views
-2

Мне нужно составить список пилотов с их количеством летных часов и сделать сортировку сортировки по возрастанию и убыванию. Я сделал восходящий избирательный вид часов, но я не знаю, как заставить программу отображать возрастающий порядок имен по часам.Выборочная сортировка в Java

Это то, что я сделал. Вы можете мне помочь?

int arr[]={50,150,100,250,200,24,376,541,56,164}; 
int arrLength = arr.length; 
for(int i=0;i<arrLength-1;i++){ 
    int min=i; 
    for (int k=i+1;k<arrLength;k++){ 
     if(arr[k]<arr[min]){ 
      min = k; 
     } 
    } 
    if (i != min) { 
     int temp=arr[i]; 
     arr[i]=arr[min]; 
     arr[min]=temp; 
    } 
} 
for (int j=0;j<arrLength;j++) { 
    System.out.println(arr[j]+" ");} 
} 

}

+4

Где пилоты? – Keppil

ответ

1

Вы используете функции подкачки. Когда вы это сделаете, вы меняете значения часов между индексами. Тогда вы должны также поменять имена соответствующих пилотов. Таким образом, для каждого свопа пилоты также будут заменены.

Функция замены я говорю это:

int temp=arr[i]; 
arr[i]=arr[min]; 
arr[min]=temp; 

ли что-то вроде:

String tempName = names[i]; 
names[i] = names[min]; 
names[min] = tempName; 

Другое дело, чтобы рассмотреть бы создать Pilot класс. При этом вы бы сохранили концепцию ООП и могли бы более легко обрабатывать сортировку.

Например,

public class Pilot implements Comparable<Pilot> { 

    int hours; 
    String name; 

    public Pilot(String name, int hours){ 
     this.name = name; 
     this.hours = hours; 
    } 

    @Override 
    public int compareTo(Pilot other){ 
     return hours.compareTo(other.hours); 
    } 

} 

Затем можно использовать функцию Pilot#compareTo(Pilot), чтобы выяснить, как сортировать пилотов на основе от числа часов или даже полностью изменить способ вы хотите отсортировать их оттуда.

1

Используйте TreeMap для хранения пилота с их летными часами, затем Java автоматически сортирует его для вас на основе значения (сделайте так, чтобы часы).

Настройка

public static Map<String, Integer> pilots = new TreeMap<String, Integer>(); 

Затем добавить к нему значения:

pilots.put (пилот-сигнала, pilotHours);

В вашем случае, вы можете использовать код, глядя, как это (от данного кода):

import java.util.Map; 
import java.util.TreeMap; 

    public class Test { 

public static Map<String, Integer> pilots = new TreeMap<String, Integer>(); 

public static void main(String[] args) { 

    int arr[] = { 50, 150, 100, 250, 200, 24, 376, 541, 56, 164 }; 
    int arrLength = arr.length; 
    for (int i = 0; i < arrLength - 1; i++) { 
     int min = i; 
     for (int k = i + 1; k < arrLength; k++) { 
      if (arr[k] < arr[min]) { 
       min = k; 
      } 
     } 
     if (i != min) { 
      int temp = arr[i]; 
      arr[i] = arr[min]; 
      arr[min] = temp; 
     } 
    } 
    for (int j = 0; j < arrLength; j++) { 
     System.out.println(arr[j] + " "); 
    } 

    for (int p = 0; p < arrLength; p++) { 

     int pilotHours = arr[p]; 
     String pilot = "PILOT NAME, HOWEVER YOU GET IT"; 

     pilots.put(pilot, pilotHours); 

    } 
    System.out.println(pilots); 
} 
    } 

Скажи мне, как она идет, после настройки его под свой код.

Главное ответ/предложение было бы использовать TreeMap

+0

@ Obicere, Мое плохое, я имел в виду TreeMap –

+0

Если я скомпилирую ваш код, он все равно сортирует мне числа. Где я ставлю имена пилотов? Извините за то, что я такой n00b, но это моя первая домашняя работа в java после нескольких классов, поэтому .. – user3163682

+0

@ user3163682, Если я правильно вас понимаю, в моем коде, где говорится: 'String pilot =" PILOT NAME, ОЧЕНЬ ВЫ ПОЛУЧАЕТЕ "; это имя пилота как простая строка, но если у вас есть массив с именами пилот-сигналов, вы можете просто поместить' String pilot = "PILOT NAME, HOWEVER YOU GET IT", 'в цикл for и set pilot = to 'pilotArray [p]', тогда он должен работать. –

1

Пару вместе имена пилотов с соответствующим количеством часов. Сортируйте этот массив (имя, часы), используя только количество часов в качестве критерия сортировки для сортировки вашего выбора. Затем пересечь отсортированный массив пар и отобразить только имена пилотов, они будут в ожидаемом порядке.

Связанным решением было бы использовать (индекс, часы) пары, где индекс относится к исходному массиву имен пилотов.При перемещении отсортированного массива пар имя сопоставимого пилот-сигнала можно ссылаться в исходном массиве с помощью этого индекса. Этот подход позволяет избежать дублирования массива имен пилотов в массиве пар в случае, если у вас есть ограничения на использование ввода или памяти.

Реализация второго решения будет выглядеть следующим образом (с сохранением большей части исходного кода):

import java.util.ArrayList; 

public class Test { 
    public static void main(String[] args) { 
     ArrayList<String> nameArr=new ArrayList<String>(); 
     nameArr.add("John"); 
     nameArr.add("Robert"); 
     nameArr.add("Duncan"); 
     nameArr.add("Steve"); 
     nameArr.add("Adrian"); 
     nameArr.add("Paul"); 
     nameArr.add("Michael"); 
     nameArr.add("Andrew"); 
     nameArr.add("Henry"); 
     nameArr.add("Bradley"); 
     int arr[]={50,150,100,250,200,24,376,541,56,164}; 
     int arrLength = arr.length; 
     assert arrLength == nameArr.size(); 

     int indexArr[]=new int[arrLength]; 
     for(int i=0;i<arrLength;i++){ 
      indexArr[i]=i; 
     } 

     for(int i=0;i<arrLength-1;i++){ 
      int min=i; 
      for (int k=i+1;k<arrLength;k++){ 
       if(arr[k]<arr[min]){ 
        min = k; 
       } 
      } 
      if (i != min) { 
       int temp=arr[i]; 
       arr[i]=arr[min]; 
       arr[min]=temp; 

       temp=indexArr[i]; 
       indexArr[i]=indexArr[min]; 
       indexArr[min]=temp; 
      } 
     } 

     for (int j=0;j<arrLength;j++) { 
      int index=indexArr[j]; 
      String name=nameArr.get(index); 
      System.out.println(name); 
     } 
    } 
} 
+0

Я понимаю, что вы говорите, но я понятия не имею, как это сделать. Я новичок в Java, начал несколько недель назад. Можете ли вы построить для меня этот код? – user3163682

+0

@ user3163682 Я отредактировал ответ, чтобы добавить образец реализации второго решения. – user3146587

Смежные вопросы