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

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

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

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

17.06.2011, 03:21. Просмотров 438. Ответов 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++
Сортировка массива C++
C++ Какие направления C++ перспективны?
Сортировка массива C++
Изменить вектор направления с координатами x и y на заданный угол C++
Игра 2048 - исправить выбор направления хода игроком C++
Нахождение направления движения C++
Как определиться с выбором направления C++
C++ Сортировка массива
C++ Сформировать массив с указанием кол-ва элементов и сортировка
Как задать направления векторов с помощью матрицы? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 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
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.06.2011, 09:46     Сортировка массива с указанием направления #4
taras atavin, а если я захочу отсортировать по возрастанию синусов? к чему мне параметр когда можно сделать компаратор
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