Как отсортировать массив C ++ в режимах ASC и DESC? - PullRequest
13 голосов
/ 24 октября 2010

У меня есть этот массив:

array[0] = 18;
array[1] = -10;
array[2] = 2;
array[3] = 4;
array[4] = 6;
array[5] = -12;
array[6] = -8;
array[7] = -6;
array[8] = 4;
array[9] = 13;

как отсортировать массив в режиме asc / desc в C ++?

Ответы [ 5 ]

45 голосов
/ 24 октября 2010

Чтобы отсортировать массив по возрастанию, используйте:

#include <algorithm>

int main()
{
   //...
   std::sort(array, array+n); //where n is the number of elements you want to sort
}

Чтобы отсортировать по убыванию, используйте

#include <algorithm>
#include <functional>  

int main()
{
   //...
   std::sort(array, array+n, std::greater<int>());
}

НТН

2 голосов
/ 24 октября 2010

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

После этого вы можете использовать функцию sort () .Приведенный пример показывает простой способ его использования.Обратите внимание, что есть третий параметр, который не используется, который будет определять, как сравнивать элементы.По умолчанию, если вы не указываете параметр, он использует «меньше чем», поэтому вы получаете сортировку по возрастанию.Измените это, чтобы указать компаратор «больше чем», чтобы получить сортировку по убыванию.

2 голосов
/ 24 октября 2010

Пользовательский функтор сравнения можно передать в функцию std :: sort .

1 голос
/ 30 марта 2013
#include <iostream>
#include <stdlib.h>
using namespace std;

int main (int argc, char *argv[])
    {
        int num[10]={18,-10,2,4,6,-12,-8,-6,13,-1};
        int temp;

        cout << "Ascending Sort : \n\n";

        for(int i=0; i<=10; i++)
            {
                for(int j=i+1; j<=10; j++)
                    {
                        if(num[i]>num[j])
                            {
                                temp=num[i];
                                num[i]=num[j];
                                num[j]=temp;
                            }
                    }
                cout << num[i] << "\n";
            }

        cout << "\nDescending Sort : \n\n";

        for(int i=0; i<=10; i++)
            {
                for(int j=i+1; j<=10; j++)
                    {
                        if(num[i]<num[j])
                            {
                                temp=num[j];
                                num[j]=num[i];
                                num[i]=temp;
                            }
                    }
                cout << num[i] << "\n";
            }

    return 0;
}
1 голос
/ 24 октября 2010

Как правило, вы можете просто поменять две переменные в

http://www.cplusplus.com/reference/algorithm/sort/

Изменить

bool myfunction (int i,int j) { return (i<j); }

до

bool myfunction (int i,int j) { return (j<i); }

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

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

bool myfunction (int j,int i) { return (i<j); }

То же самое относится и к

http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/

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