почему мой массив не печатается правильно (пузырьковая сортировка) - PullRequest
0 голосов
/ 27 апреля 2020

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

Тем не менее, если я случайным образом введу количество проданных мисок следующим образом

(1 продано - за первый аромат в массиве)

(2 продано - за второй аромат в массиве)

(3 продано - за третий аромат в массиве)

(4 проданных за четвертый вкус в массиве)

выход

курица 4

__ 3

__ 2

__ 1

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

Буду очень признателен за ваш отзыв

#include <iostream>
#include <string>
using namespace std;


int main ()
{
    string flavor[]={"fish","lamp","steak" ,"chicken"}   ;
    int scoops[100]={};
    int sum=0;
    int x=0;

    for(x=0;x<4;x++)
    {
        cout <<"enter amount of bowls for the following ramen flavor :"<<flavor[x] <<endl;
        cin>>scoops[x];
        sum=scoops[x]+sum;
    }

    cout <<"total number of bowls is "<<sum<<endl;
    cout <<"list of the most popular flavors to least popular flavors "<<endl;//bubble sort


    int i=0,j=0,temp,char tempf;

    if(scoops[j]<scoops[j+1])
    {
        temp=scoops[j];
        scoops[j]=scoops[j+1];
        flavor[j]=flavor[j+1];
        scoops[j+1]=temp;
        flavor[j+1]=tempf;
    }



for (int a=0;a<4;a++)
{
    cout <<flavor[a] <<"\t"<<scoops[a]<<endl;
}
}

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Я думаю, что вам следует перебрать массив scoops [], проверить его значение и использовать функции swap (), которые предоставляет нам алгоритм STL ::.

int length = sizeof(flavor)/sizeof(flavor[0]);
for (int i = 0; i < length-1; ++i)
{
     for (int j = i+1; j < length; ++j)
     {    
         if (scoops[i] > scoops[j])
         {
             swap(flavor[i], flavor[j]);    
         } 
     }
 }
0 голосов
/ 27 апреля 2020

Вы можете реализовать пузырьковую сортировку в вашем сценарии так:

  int i = 0;
  bool is_sorted = true;
  int number_of_scoop_records = 4;

  // We keep looping over the array until all the elements are sorted
  while(true) {

    if(i >= (number_of_scoop_records-1)) {
      // All elements sorted, nothing to do anymore
      if(is_sorted)
        break;

      // Lets go around again
      i = 0;
      is_sorted = true;
      continue;
    }

    // Unsorted elements found
    if(scoops[i+1] < scoops[i]) {
      is_sorted = false;
      std::swap(scoops[i+1], scoops[i]);
    }
    i++;
  }
...