Сортировка массивов и значений в с ++ - PullRequest
0 голосов
/ 27 января 2020
#include <iostream>
using namespace std;

int main() {
    int a=70, b=40, c=5, d=1, e=-20, f=90, g=2, mid;
    int array[7]={a, b, c, d, e, f, g};
    for (int i = 0; i<=5; i++) {
        while (i=0) {
            if (a>b && a>c && a>d && a>e && a>f && a>g) {
                mid=g;
                g=a;
                a=mid;
            }
                else if (b>a && b>c && b>d && b>e && b>f && b>g) {
                    mid=g;
                    g=b;
                    b=mid;
                }
                else if (c>a && c>b && c>d && c>e && c>f && c>g) {
                    mid=g;
                    g=c;
                    c=mid;
                }
                else if (d>a && d>c && d>b && d>e && d>f && d>g) {
                    mid=g;
                    g=d;
                    d=mid;
                }
                else if (e>a && e>c && e>d && e>b && e>f && e>g) {
                    mid=g;
                    g=e;
                    e=mid;
                }
                else if (f>a && f>c && f>d && f>e && f>b && f>g) {
                    mid=g;
                    g=f;
                    f=mid;
                }
                else if (g>a && g>c && g>d && g>e && g>f && g>b) {
                    mid=g;
                    g=g;
                    g=mid;
                }
        }
        while (i=1) {
            if (a>b && a>c && a>d && a>e && a>f) {
                mid=f;
                f=a;
                a=mid;
            }
                else if (b>a && b>c && b>d && b>e && b>f) {
                    mid=f;
                    f=b;
                    b=mid;
                }
                else if (c>a && c>b && c>d && c>e && c>f) {
                    mid=f;
                    f=c;
                    c=mid;
                }
                else if (d>a && d>c && d>b && d>e && d>f) {
                    mid=f;
                    f=d;
                    d=mid;
                }
                else if (e>a && e>c && e>d && e>b && e>f) {
                    mid=f;
                    f=e;
                    e=mid;
                }
                else if (f>a && f>c && f>d && f>e && f>b) {
                    mid=f;
                    f=b;
                    b=mid;
                }
        }
        while (i=2) {
            if (a>b && a>c && a>d && a>e) {
                mid=e;
                e=a;
                a=mid;
            }
                else if (b>a && b>c && b>d && b>e) {
                    mid=e;
                    e=b;
                    b=mid;
                }
                else if (c>a && c>b && c>d && c>e) {
                    mid=e;
                    e=c;
                    c=mid;
                }
                else if (d>a && d>c && d>b && d>e) {
                    mid=e;
                    e=d;
                    d=mid;
                }
                else if (e>a && e>c && e>d && e>b) {
                    mid=e;
                    e=e;
                    e=mid;
                }

        }
        while (i=3) {
            if (a>b && a>c && a>d) {
                mid=d;
                d=a;
                a=mid;
            }
                else if (b>a && b>c && b>d) {
                    mid=d;
                    d=b;
                    b=mid;
                }
                else if (c>a && c>b && c>d) {
                    mid=d;
                    d=c;
                    c=mid;
                }
                else if (d>a && d>c && d>b) {
                    mid=d;
                    d=d;
                    d=mid;
                }

        }
        while (i=4) {
            if (a>b && a>c) {
                mid=c;
                c=a;
                a=mid;
            }
                else if (b>a && b>c) {
                    mid=c;
                    c=b;
                    b=mid;
                }
                else if (c>a && c>b) {
                    mid=c;
                    c=c;
                    c=mid;
                }


        }
        while (i=5) {
            if (a>b) {
                mid=b;
                b=a;
                a=mid;
            }
                else if (b>a) {
                    mid=b;
                    b=b;
                    b=mid;
                }
        }
    }

    for (int k=0; k<7; k++){
        cout<<array[k]<<" ";
    }

}

Эта программа не выдает вывод ... Что мне делать вместо этого? Я перепробовал все, но это просто не доходит до выполнения части? Что мне делать?

Ответы [ 2 ]

1 голос
/ 27 января 2020

Вы можете использовать стандартную или стандартную библиотеку для сортировки. Или вы можете написать код самостоятельно. Пожалуйста, go через приведенный ниже код.

#include<iostream> 
using namespace std;

void selectionSort(int a[], int n) {
   int i, j, min, temp;
   for (i = 0; i < n - 1; i++) {
      min = i;
      for (j = i + 1; j < n; j++)
         if (a[j] < a[min])
            min = j;
      temp = a[i];
      a[i] = a[min];
      a[min] = temp;
   }
}
int main() {
   int a[] = { 22, 91, 35, 78, 10, 8, 75, 99, 1, 67 };
   int n = sizeof(a)/ sizeof(a[0]);
   int i;
   cout<<"Given array is:"<<endl;
   for (i = 0; i < n; i++)
   cout<< a[i] <<" ";
   cout<<endl;
   selectionSort(a, n);      // calling my function selection sort. This will sort as ascending order

   for (i = 0; i < n; i++)  
   cout<< a[i] <<" ";       // Printing sorted array
   return 0;
}

Вышеуказанный код предназначен для возрастания.

Для нисходящего порядка см .: https://www.includehelp.com/cpp-programs/sort-an-array-in-descending-order.aspx

1 голос
/ 27 января 2020
  1. Вы перепутали назначение (=) с comaprison (==). while(i = x) присваивает x i, затем оценивает i, поэтому оно равно while(x), что означает никогда , если x равно 0 и бесконечно иначе.

  2. Ваши петли все еще бесконечны. Возьмем для примера (фиксированный) l oop while (i == 3). i никогда не изменяется внутри этого l oop, и в нем нет break или return, поэтому даже фиксированная версия будет работать бесконечно. Но это проблема дизайна , которую нужно решить. Может быть, после всех этих if должно быть else { break; }?

  3. Вы все равно получите неправильный результат, поскольку вы меняете значения переменных, a, b, c, d, e, f и g, но никогда не изменяйте array. Однако в конце вы печатаете значения массива. Массив не хранит элементы по ссылке, но копирует их значения. Почему вы даже используете так много переменных и не работаете с массивом напрямую?

  4. Последний else if(..) блок в каждом while бесполезен. Посмотрите, например, на этот код:

    mid=d;
    d=d;
    d=mid;
    

    Он присваивает значение d d. Дважды .

  5. Как уже упоминалось в комментариях, сортировка реализована в стандартной библиотеке. Используйте std :: sort вместо написания собственной функции сортировки:

    std::sort(std::begin(array), std::end(array));
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...