Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
rodrigezrobert
3 / 3 / 0
Регистрация: 03.07.2010
Сообщений: 77
#1

Сортировка массива с указанием направления - C++

17.06.2011, 03:21. Просмотров 445. Ответов 4
Метки нет (Все метки)

Здравствуйте еще раз! Есть массив отсортированный пузырьком. В функцию SortArr надо добавить третий параметр - указатель на шаблонную функцию определения направления сортировки. Можно сортировать другим методом. Спасибо!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
template <typename T>
void Init(T * pAr, int iSize);
template <typename T>
void SortArr (T * pAr, int iSize, /*указатель на функцию направления сортировки (bool *(pAr)(T,T)*/ );
 
 
int _tmain(int argc, _TCHAR* argv[])
{ 
    double arr [50];
    Init(arr, 50);
    SortArr (arr, 50);
    for (int i=0; i<49; ++i)
        cout << arr[i] << endl;
    return 0;
}
template <typename T>
 
 
void Init(T * pAr, int iSize)
{
    for (int i = 0; i < iSize; ++i)         
        pAr[i] = (rand()%31)/1.5;
}
template <typename T>
void SortArr (T * pAr, int iSize)
{
for (int i=0; i < iSize; ++i)
        for (int j=0; j < iSize - 1; ++j)
            if (pAr[j]>pAr[j+1])
            {
                double tmp = pAr[j] ;
                pAr[j]=pAr[j+1];
                pAr[j+1] = tmp;
            }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2011, 03:21     Сортировка массива с указанием направления
Посмотрите здесь:

Сформировать массив с указанием кол-ва элементов и сортировка - C++
Доброго времени суток. Нужно сформировать массив (одномерный) с указанием пользователем кол-ва элементов и далее отсортировать его четные...

Не получается заполнение двумерного массива случайными числами с указанием количества строк и столбцов. - C++
Помогите исправить что не так: #include&lt;iostream.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt; void main() { int n, m, F=0, a; ...

Сортировка массива: перенести положительные числа в начало, а отрицательные - в конец массива - C++
Дан вещественный массив A(N). Отсортировать его таким образом, чтобы все положительные числа находились в начале, а отрицательные - в конце...

Сортировка массива структур через сортировку массива указателей - C++
Ошибка возникает в функции void sort(student **ppStud, int k, char ch). Кто видит ошибку - помогите, пожалуйста. Код программы: ...

Сортировка массива. Ошибка после ввода размерности массива - C++
подскажите почему после ввода размерности массива выдает ошибку #include&lt;iostream&gt; #include&lt;cstdlib&gt; #include&lt;conio&gt; using...

Сортировка массива, вместо массива выводит мусор - C++
Здравствуйте Уважаемые жители форума! Есть рабочий код сортируем массив выбором поиск наименьшего значения, но почему выводит какой то...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.06.2011, 04:21     Сортировка массива с указанием направления #2
если шаблонная то зачем
Цитата Сообщение от rodrigezrobert Посмотреть сообщение
double tmp = pAr[j] ;
надо
C++
1
T tmp = pAr[j];
Добавлено через 53 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>  
 
template <typename T>
void Init(T * pAr, int iSize);
 
template <typename T>
bool compare(const T &, const T &);
 
template <typename T>
void SortArr (T * pAr, int iSize, bool (*func)(const T &, const T &));
 
int main()
{ 
    double arr[10];
    Init(arr, 10);
    SortArr(arr, 10, compare<double>);
    for(int i = 0; i < 10; ++i)
    std::cout << arr[i] << std::endl;
    return 0;
}
 
template <typename T>
void Init(T * pAr, int iSize)
{
    for(int i = 0; i < iSize; ++i)         
    pAr[i] = (rand() % 31) / 1.5;
}
 
template <typename T>
void SortArr (T * pAr, int iSize, bool (*func)(const T &, const T &))
{
    for(int i = 0; i < iSize - 1; ++i)
    for (int j = i + 1; j < iSize; ++j)
        if (func(pAr[i], pAr[j]))
        {
            T tmp = pAr[j];
            pAr[j] = pAr[i];
                                  pAr[i] = tmp;
                }
}
 
template <typename T>
bool compare(const T & m, const T & n)
{
    return m > n;
}
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.06.2011, 06:41     Сортировка массива с указанием направления #3
Цитата Сообщение от rodrigezrobert Посмотреть сообщение
Здравствуйте еще раз! Есть массив отсортированный пузырьком. В функцию SortArr надо добавить третий параметр - указатель на шаблонную функцию определения направления сортировки. Можно сортировать другим методом. Спасибо!
А смысл бульной функции задания направления? Может тогда уж просто логический параметр?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <typename Type> void sort(Type *Data, unsigned int Count, bool Order)
{
 Type *p1,*p2, *e=Data+Count-1, temp;
 for (p1=Data; p1<e; ++p1)
 {
  for (p2=p1+1; p2<=e; ++p2)
  {
   if (((*p1)<(*p2))^Order)
   {
    temp=*p1;
    *p1=*p2;
    *p2=temp;
   }
  }
 }
}
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.06.2011, 09:46     Сортировка массива с указанием направления #4
taras atavin, а если я захочу отсортировать по возрастанию синусов? к чему мне параметр когда можно сделать компаратор
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2011, 10:21     Сортировка массива с указанием направления
Еще ссылки по теме:

Нахождение направления движения - C++
Пользуюсь двумя формулами x1 = 0 + cos(angle)*radius; y1 = 0 + sin(angle)*radius; для нахождения направления движения. После...

Изменение направления сортировки - C++
Подскажите плиз где надо знак поменять чтобы числа по убыванию были! #include &lt;iostream.h&gt; #include &lt;conio.h&gt; using namespace std;...

Какие направления C++ перспективны? - C++
Интересует, какие направления языка C++ перспективны для будущей работы (понятно, что одним языком не обойтись и еще связки с теми же...

Указатели массива и сортировка массива - C++
Доброго времени суток, вот бьюсь над проблемой, нужна программа которая б сортировку динамического массива (ввод с клавиатуры) из 10...

Как определиться с выбором направления - C++
Добрый день. Я начинающий программист, и настал тот момент, когда нужно определиться, в какую сторону двигаться дальше. Определенно меня...

Как задать направления векторов с помощью матрицы? - C++
Здравствуйте. Пусть есть 2 вектора а=(1,0) и b=(0,1). В программе я их задаю пускай через массив: А={1,0,0,1}. А как задать направления...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.06.2011, 10:21     Сортировка массива с указанием направления #5
Тогда указатель на функцию сравнения двух элементов, но не на функцию порядка. А сортировка по возрастнию тангесов, или по убыванию арксинусов - вопрос сравниваемого признака.
Yandex
Объявления
17.06.2011, 10:21     Сортировка массива с указанием направления
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru