Попытка отсортировать массив - PullRequest
0 голосов
/ 21 октября 2010

Я пытаюсь отсортировать массив от наименьшего к наибольшему, и я действительно потерян ....

Вот что у меня есть:

 int temp, temp2;
    for (int x = 0; x < array_size; x++)
    {
            temp=a[x];

            for (int i = 0; i < array_size; i++)
            {
                if (a[i] < temp)
                {
                    temp2=a[i];
                    a[i]=temp;
                    a[x]=temp2;
                }
            }
    }

обновлено: все еще нетработает, и я должен использовать код.

int temp, temp2, x=-1;
for (int x = 0; x < array_size; x++)
{
        temp=a[x];

        for (int i = x+1; i < array_size; i++)
        {
            if (a[i] < temp)
            {
                temp2=a[i];
                a[i]=temp;
                a[x]=temp2;
            }
        }
}

Ответы [ 4 ]

5 голосов
/ 21 октября 2010

Если это не домашнее задание и вы не ограничены в том, какие функции вы можете использовать:

#include <algorithm>
...
std::sort(a,a+array_size);
3 голосов
/ 21 октября 2010

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

def bubblesort (array, count):
    limit = count - 2
    didSwap = true
    while (didSwap) {
        didSwap = false
        for pos = 0 to limit:
            if array[pos] > array[pos+1]:
                temp = array[pos]
                array[pos] = array[pos+1]
                array[pos+1] = temp
                didSwap = true
            endif
        endfor
        limit = limit - 1
    endwhile
enddef

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

Он относительно эффективен (в отношении сортировки по пузырькам), поскольку не перепроверяет элементы, которые уже были размещены в правильной позиции (каждая итерация перемещает еще один элемент в правильную позицию вверху списка, следовательно, использование limit) и будет завершено после итерации, в которой перестановки не выполняются (т. е. список сортируется).

1 голос
/ 21 октября 2010

Вы можете использовать алгоритм STL sort .

Если вы действительно хотите передать код вручную, вы можете внести некоторые изменения:

Во внутреннемfor loop, измените

int i = 0

на

int i = x + 1

Кроме того, переназначьте temp на a[i] внутри if.


Полный код ниже:

// Arun Saha, 2010-Oct-20
// /3799148/popytka-otsortirovat-massiv

#include <iostream>
using namespace std;

void
mysort( int * a, size_t array_size ) {

    for( size_t i = 0; i < array_size; ++i ) {

        int minSoFar = a[i];

        for (size_t j = i+1; j < array_size; ++j ) {

            if( a[j] < minSoFar ) {

                minSoFar = a[j];

                int tmp = a[i];
                a[i]    = a[j];
                a[j]    = tmp;
            }
        }
    }
}

int
main() {

   int x[] = {40, 60, 10, 30, 20, 50};
   const size_t N = sizeof( x ) / sizeof( int );

   for( size_t i = 0; i < N; ++i ) {
       cout << x[ i ] << " ";
   }
   cout << endl;

   mysort( x, N );

   for( size_t i = 0; i < N; ++i ) {
       cout << x[ i ] << " ";
   }
   cout << endl;
}
1 голос
/ 21 октября 2010

Вы смотрели на метод C 'qsort'?Это отсортирует ваш массив.

C ++ также имеет свою собственную встроенную функцию сортировки, как часть своей стандартной библиотеки.

Не можете ли вы использовать ни один из них?

В вашем коде внутренний цикл должен начинаться с int i = x+1;, а не с i, начинающегося с 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...