2014-11-07 2 views
-2

я запустить эту программу - результаты должны бытьBubble Сортировка Параллельные Массивы

12,12.0 
8,8.0 
7,0.7 
5,2.5 
5,0.25 

Однако, когда я запускаю эту программу я получаю результаты

8,8.0 
7,0.7 
5,0.25 
12,12.0 
5,2.5 

Я старался изо всех сил получить номера в порядке, как описано выше первого примера может кто-нибудь посоветовать мне решение

public class BubParArrays { 

    public static void main(String[] args) { 

     int saleUnits[] = {5, 12, 5, 7, 8}; 
     double salePrices[] = {2.5, 12.0, 0.25, 0.7, 8.0}; 
     int pass, comparison, tempsaleunit; 
     double tempsaleprice; 
     String results = ""; 

     for (pass = 1; pass <= saleUnits.length - 1; pass++) { 
      for (comparison = 1; comparison <= saleUnits.length - pass; comparison++) { 
       if (saleUnits[comparison - 1] < saleUnits[comparison]) { 
        System.out.println("If saleUnits[ " + (comparison - 1) + " ] < salesUnits [ " + comparison + "] \n "); 
       } 

       { 
        tempsaleunit = saleUnits[comparison - 1]; 
        System.out.println("tempsaleunit \t" + tempsaleunit + " = saleUnits [ " + (comparison) + " ]"); 

        saleUnits[comparison - 1] = saleUnits[comparison]; 
        System.out.println(" saleUnits [ " + (comparison - 1) + " ]" + " = saleUnits [ " + (comparison) + " ]"); 

        saleUnits[comparison] = tempsaleunit; 
        System.out.println(" saleUnits[ " + comparison + " ] " + " = tempsaleunit " + tempsaleunit); 

        tempsaleprice = salePrices[comparison - 1]; 
        System.out.println(" tempsaleprice \t" + tempsaleprice + " = salePrices [ " + (comparison - 1) + "]"); 

        salePrices[comparison - 1] = salePrices[comparison]; 
        System.out.println(" salePrices[ " + (comparison - 1) + " ] = salePrices [ " + (comparison) + "]"); 

        salePrices[comparison] = tempsaleprice; 
        System.out.println(" salePrices [ " + comparison + "] = tempsaleprice " + tempsaleprice + "\n"); 
       } 
      } 
     } 

     for (int index = 0; index < (saleUnits.length); index++) { 
      results = results + saleUnits[index] + "," + salePrices[index] + "\n"; 
     } 
     System.out.print(" Sorted on units of sale \n" + results); 
    } 
} 
+0

Вы здесь возникают проблемы из-за того, как вы структурировать ваши данные, чтобы начать с. Из данных я делаю вывод, что у вас есть инвентарь под рукой и цена, которую вы продаете. Итак, вы действительно * сортируете * данные или пытаетесь установить, какой инвентарь идет, с какой товарной позицией? Есть ли причина, по которой данные должны быть структурированы так? Если да, то почему (что поможет с решением), а если нет, реструктурируйте данные для начала в более подходящей усадьбе. –

+0

Прошу прощения. Все, что я пытаюсь сделать, это сортировать два массива в порядке убывания, чем у salesUnits {5,12,5,7,8} и salesPrices {2,5,12,0,0,25,0,7,8.0}, поэтому ответ должен быть 12,8,7,5,5, а рядом с ним - цены в порядке убывания 12,0,8,0,0,7,2,5,0,25. Это пример из книги, в которой есть ответ, напечатанный, как я изложил в начале. и я пытаюсь выяснить, почему он не сортирует его так, как должно, - спасибо за ваш вклад. Я знаю, что мой код повсюду, но я только изучаю. – rover2015

ответ

0

FYI это не пузырьковой сортировки вы смешиваете выбора сортировки и пузырьковой сортировки ... Изменить эти зацикливания условия

for (pass = 1; pass <= saleUnits.length - 1; pass++) { 
for (comparison = 1; comparison <= saleUnits.length - pass; comparison++) 

к

for (pass = 0; pass < saleUnits.length; pass++) { 
for (comparison = 1; comparison <= saleUnits.length-1; comparison++) 

также необходимо изменить

if (saleUnits[comparison - 1] < saleUnits[comparison]) { 
        System.out.println("If saleUnits[ " + (comparison - 1) + " ] < salesUnits [ " + comparison + "] \n "); 
       } 

       { 

к

if (saleUnits[comparison - 1] < saleUnits[comparison]) { 
       System.out.println("If saleUnits[ " + (comparison - 1) + " ] < salesUnits [ " + comparison + "] \n "); 

Вы должны удалить это '}' и '{'
Вы новый код должен выглядеть следующим образом:

public class BubParArrays { 
    public static void main(String[] args) { 
     int saleUnits[] = {5, 12, 5, 7, 8}; 
     double salePrices[] = {2.5, 12.0, 0.25, 0.7, 8.0}; 
     int pass, comparison, tempsaleunit; 
     double tempsaleprice; 
     String results = ""; 

     for (pass = 0; pass < saleUnits.length; pass++) { 
      for (comparison = 1; comparison <= saleUnits.length-1; comparison++) { 
       if (saleUnits[comparison - 1] < saleUnits[comparison]) { 
        System.out.println("If saleUnits[ " + (comparison - 1) + " ] < salesUnits [ " + comparison + "] \n "); 

        tempsaleunit = saleUnits[comparison - 1]; 
        System.out.println("tempsaleunit \t" + tempsaleunit + " = saleUnits [ " + (comparison) + " ]"); 

        saleUnits[comparison - 1] = saleUnits[comparison]; 
        System.out.println(" saleUnits [ " + (comparison - 1) + " ]" + " = saleUnits [ " + (comparison) + " ]"); 

        saleUnits[comparison] = tempsaleunit; 
        System.out.println(" saleUnits[ " + comparison + " ] " + " = tempsaleunit " + tempsaleunit); 

        tempsaleprice = salePrices[comparison - 1]; 
        System.out.println(" tempsaleprice \t" + tempsaleprice + " = salePrices [ " + (comparison - 1) + "]"); 

        salePrices[comparison - 1] = salePrices[comparison]; 
        System.out.println(" salePrices[ " + (comparison - 1) + " ] = salePrices [ " + (comparison) + "]"); 

        salePrices[comparison] = tempsaleprice; 
        System.out.println(" salePrices [ " + comparison + "] = tempsaleprice " + tempsaleprice + "\n"); 
       } 
      } 
     } 

     for (int index = 0; index < (saleUnits.length); index++) { 
      results = results + saleUnits[index] + "," + salePrices[index] + "\n"; 
     } 
     System.out.print(" Sorted on units of sale \n" + results); 
    } 
} 

Выход:

If saleUnits[ 0 ] < salesUnits [ 1] 

tempsaleunit 5 = saleUnits [ 1 ] 
saleUnits [ 0 ] = saleUnits [ 1 ] 
saleUnits[ 1 ] = tempsaleunit 5 
tempsaleprice 2.5 = salePrices [ 0] 
salePrices[ 0 ] = salePrices [ 1] 
salePrices [ 1] = tempsaleprice 2.5 

If saleUnits[ 2 ] < salesUnits [ 3] 

tempsaleunit 5 = saleUnits [ 3 ] 
saleUnits [ 2 ] = saleUnits [ 3 ] 
saleUnits[ 3 ] = tempsaleunit 5 
tempsaleprice 0.25 = salePrices [ 2] 
salePrices[ 2 ] = salePrices [ 3] 
salePrices [ 3] = tempsaleprice 0.25 

If saleUnits[ 3 ] < salesUnits [ 4] 

tempsaleunit 5 = saleUnits [ 4 ] 
saleUnits [ 3 ] = saleUnits [ 4 ] 
saleUnits[ 4 ] = tempsaleunit 5 
tempsaleprice 0.25 = salePrices [ 3] 
salePrices[ 3 ] = salePrices [ 4] 
salePrices [ 4] = tempsaleprice 0.25 

If saleUnits[ 1 ] < salesUnits [ 2] 

tempsaleunit 5 = saleUnits [ 2 ] 
saleUnits [ 1 ] = saleUnits [ 2 ] 
saleUnits[ 2 ] = tempsaleunit 5 
tempsaleprice 2.5 = salePrices [ 1] 
salePrices[ 1 ] = salePrices [ 2] 
salePrices [ 2] = tempsaleprice 2.5 

If saleUnits[ 2 ] < salesUnits [ 3] 

tempsaleunit 5 = saleUnits [ 3 ] 
saleUnits [ 2 ] = saleUnits [ 3 ] 
saleUnits[ 3 ] = tempsaleunit 5 
tempsaleprice 2.5 = salePrices [ 2] 
salePrices[ 2 ] = salePrices [ 3] 
salePrices [ 3] = tempsaleprice 2.5 

If saleUnits[ 1 ] < salesUnits [ 2] 

tempsaleunit 7 = saleUnits [ 2 ] 
saleUnits [ 1 ] = saleUnits [ 2 ] 
saleUnits[ 2 ] = tempsaleunit 7 
tempsaleprice 0.7 = salePrices [ 1] 
salePrices[ 1 ] = salePrices [ 2] 
salePrices [ 2] = tempsaleprice 0.7 

Sorted on units of sale 
12,12.0 
8,8.0 
7,0.7 
5,2.5 
5,0.25 
+0

Мне очень жаль, что вопрос назывался bubble sort parrallel arrays, вы правы, я просто пытаюсь сортировать оба массива в порядке decsending бок о бок - я попробовал ваше решение, он не заказал номера для меня – rover2015

+0

@ rover2015, пожалуйста, проверьте все код, потому что он дает мне правильный выход! – StackFlowed

+0

Хорошо, мне потребовалось некоторое время, чтобы увидеть, где я пошла не так, потому что сейчас работаю, спасибо, я изучу его сейчас, чтобы понять, почему это было неправильно, в первую очередь, в примере, в котором был установлен проход (pass = 1; pass <= salesUnits.length -1; pass ++) Теперь я вижу, что вы должны установить этот проход (pass = 0; pass rover2015

0

Ваш код невероятно трудно следовать. Я хотел бы начать с реализации методов для замены элементов в двух моих типов массивов,

private static void swap(int[] arr, int i, int j) { 
    if (i == j) { 
     return; 
    } 
    int temp = arr[i]; 
    arr[i] = arr[j]; 
    arr[j] = temp; 
} 

private static void swap(double[] arr, int i, int j) { 
    if (i == j) { 
     return; 
    } 
    double temp = arr[i]; 
    arr[i] = arr[j]; 
    arr[j] = temp; 
} 

Затем синхронизировать swap (s), как,

public static void main(String[] args) { 
    int saleUnits[] = { 5, 12, 5, 7, 8 }; 
    double salePrices[] = { 2.5, 12.0, 0.25, 0.7, 8.0 }; 
    for (int i = 0; i < saleUnits.length - 1; i++) { 
     for (int j = i + 1; j < saleUnits.length; j++) { 
      if (saleUnits[i] < saleUnits[j]) { 
       swap(saleUnits, i, j); 
       swap(salePrices, i, j); 
      } 
     } 
    } 
    for (int i = 0; i < saleUnits.length; i++) { 
     System.out.printf("%2d %.2f%n", saleUnits[i], salePrices[i]); 
    } 
} 

Выход

12 12.00 
8 8.00 
7 0.70 
5 2.50 
5 0.25 

Редактировать

Конечно, это m руды эффективно создать POJO и использовать встроенный в роде как

static class SalesData implements Comparable<SalesData> { 
    final int units; 
    final double price; 

    public SalesData(int units, double price) { 
     this.units = units; 
     this.price = price; 
    } 

    @Override 
    public String toString() { 
     return String.format("%s %s", units, price); 
    } 

    @Override 
    public int compareTo(SalesData o) { 
     if (this.units != o.units) { 
      return -Integer.valueOf(this.units).compareTo(o.units); 
     } 
     return -Double.valueOf(this.price).compareTo(o.price); 
    } 
} 

public static void main(String[] args) { 
    int saleUnits[] = { 5, 12, 5, 7, 8 }; 
    double salePrices[] = { 2.5, 12.0, 0.25, 0.7, 8.0 }; 
    SalesData[] data = new SalesData[saleUnits.length]; 
    for (int i = 0; i < saleUnits.length; i++) { 
     data[i] = new SalesData(saleUnits[i], salePrices[i]); 
    } 
    Arrays.sort(data); 
    for (SalesData sdt : data) { 
     System.out.println(sdt); 
    } 
} 
1

Поскольку я не думаю, что я должен делать свою домашнюю работу, вот версия псевдокод алгоритма для вас работать с.

procedure bubbleSort(A : list of sortable items) n = length(A) repeat swapped = false for i = 1 to n-1 inclusive do /* if this pair is out of order */ if A[i-1] > A[i] then /* swap them and remember something changed */ swap(A[i-1], A[i]) swapped = true end if end for until not swapped end procedure

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