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

Нужно отсортировать массив от *start до *finish - C++

Восстановить пароль Регистрация
 
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
15.10.2012, 15:47     Нужно отсортировать массив от *start до *finish #1
нужно отсортировать массив от *start до *finish
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template<class elm>
void sorting(elm *st,elm *fn)
{
 
    for(;st!=fn;st++)
    {
        for(elm *next=st;next!=fn;next++)
        {
            if((*next)<(*st))
            {
                swaping((*next),(*st));
            }
        }
    }
}
C++
1
2
3
4
5
6
7
template<class elm>
void swaping(elm &i,elm &j)
{
    elm tmp=i;
    i=j;
    j=tmp;
}
вылетает после первого круга, теряеться значение *fn не знаю по чему
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
titans2011
293 / 254 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
15.10.2012, 16:33     Нужно отсортировать массив от *start до *finish #2
Если код не большой, то приведите его тут. (хотя бы некий минимум для компиляции)
невозможно угадать откуда берутся значения elm *st,elm *fn. Может это просто два разных указателя, а не указатели со смещением.
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
16.10.2012, 12:31  [ТС]     Нужно отсортировать массив от *start до *finish #3
Моя функция sorting() это породия на sort() из <algorthm> библиотеки обобщённых олгаритмов.Она должна работать и с STL и с "Array"
Array.h - самодельный контейнер
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#ifndef ARRAY_H
#define ARRAY_H
#include <iostream>
using namespace std;
 
//определение
 
template<class type>
class Array
{
public:
    Array(int sz=0){ init(0,sz); }
    Array(type *a,int sz){ init(a,sz); }
    Array(Array *a){ init(a,a->Size()); }
    int Size(){ return size; }
    ~Array(){ delete[] arr; }
    void display();
    type& operator[](int i){return arr[i];}
    bool operator ==(Array &a);
    bool operator !=(Array &a);
    Array* operator =(Array *a){return a;}
    type find(type val);
    void push(type v);
    void pup(){ size--; }
    type* begin(){ return &arr[0];}
    type* end(){ return &arr[size];}
protected:
    void init(type *a,int sz);
    int size;
    type *arr;
};
 
//реализация
 
template<class type>
void Array<type>::display()
{
    cout<<"This-"<<(this)<<" cout="<<size<<" size="<<sizeof(type)*size<<"bytes"<<endl;
    for(int i=0;i<size;i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}
template<class type>
bool Array<type>::operator ==(Array &a)
{
    if(a.Size()!=this->size)
        return false;
    else
    {
        for(int i=0;i<this->size;i++)
        {
            if(a.arr[i]!=this->arr[i])
                return false;
        }
        return true;
    }
}
template<class type>
bool Array<type>::operator !=(Array &a)
{
    if(a.Size()!=this->size)
        return true;
    else
    {
        for(int i=0;i<this->size;i++)
        {
            if(a.arr[i]!=this->arr[i])
                return true;
        }
        return false;
    }
}
template<class type>
void Array<type>::push(type v)
{
    type temp[size];
    for(int i=0;i<size;i++)
    {
        temp[i]=arr[i];
    }
    size++;
    arr=new type[size];
    for(int i=0;i<size-1;i++)
    {
        arr[i]=temp[i];
    }
    arr[size-1]=v;
}
template<class type>
void Array<type>::init(type *a, int sz)
{
    size=sz;
    arr=new type[size];
    for(int i=0;i<size;i++)
    {
        if(!a)
        {
            arr[i]=type();
        }
        else
        {
            arr[i]=a[i];
        }
    }
}
 
#endif // ARRAY_H
algorithms.h - обощённые алгоритмы которые должны работать как с классом "Array" так и с STL.
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
#ifndef ALGORITHMS_H
#define ALGORITHMS_H
#include "Array.h"
template<class elm>
void swaping(elm &i,elm &j)
{
    elm tmp=i;
    i=j;
    j=tmp;
}
template<class elm>
void sorting(elm *st,elm *fn)
{
  //  elm *fin=fn;
    while(st!=fn)
    {
        for(elm *next=st;next!=fn;next++)
        {
            if((*next)<(*st))
            {
                swaping((*next),(*st));
            }
        }
        st++;
    }
}
 
#endif // ALGORITHMS_H
main.cxx
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <QtCore/QCoreApplication>
#include <vector>
#include <algorithm>
#include <iostream>
#include "Array.h"
#include "Algorithms.h"
using namespace std;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    int myints[] = {32,71,12,45,26,80,53,33};
    Array<int> arr(myints,8);
    arr.display();
    sort(arr.begin(),arr.end()); //пример вызова функции
    arr.display();
 
    return a.exec();
}
p.s. надеюсь всё понятно
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
16.10.2012, 13:28     Нужно отсортировать массив от *start до *finish #4
Вроде все ок
Кликните здесь для просмотра всего текста
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
#include <iostream>
 
template<class elm>
void swaping(elm &i,elm &j)
{
    elm tmp=i;
    i=j;
    j=tmp;
}
 
template<class elm>
void sorting(elm *st,elm *fn)
{
 
    for(;st!=fn;st++)
    {
        for(elm *next=st;next!=fn;next++)
        {
            if((*next)<(*st))
            {
                swaping((*next),(*st));
            }
        }
    }
}
 
int main()
{
   int array[10];
   for(int i = 0;i < 10; ++i)
   {
      array[i] = rand()%100;
      std::cout << array[i] << " ";
   } 
   std::cout << std::endl;
 
   sorting(array, array+10);
   for(int i = 0;i < 10; ++i)
      std::cout << array[i] << " ";
   std::cout << std::endl;
}


Добавлено через 9 минут
Более того, даже с использованием вашего класса Array все тоже сортируется нормально
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
16.10.2012, 15:01  [ТС]     Нужно отсортировать массив от *start до *finish #5
в натуре)))) я базарю вчера ещё не работало))
Yandex
Объявления
16.10.2012, 15:01     Нужно отсортировать массив от *start до *finish
Ответ Создать тему
Опции темы

Текущее время: 04:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru