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

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

Восстановить пароль Регистрация
 
Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
23.09.2012, 15:50     Сортировка слиянием массива из строк #1
с сортировкой слиянием для чисел разобрался а вот со строками никак не получается помогите пож-та, вот код программы:

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
110
111
112
113
114
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <iomanip>
#include <string>
 
using namespace std;
 
const long stringsize=100;
string stringarray[stringsize];
 
template<class T>
// a - сортируемый массив, его левая граница lb, правая граница ub
 
void mergeSort(T a[], long lb, long ub)
{
  long split;                   // индекс, по которому делим массив
 
  if (lb < ub) {                // если есть более 1 элемента
 
    split = (lb + ub)/2;
 
    mergeSort(a, lb, split);       // сортировать левую половину
    mergeSort(a, split+1, ub);// сортировать правую половину
    merge(a, lb, split, ub);    // слить результаты в общий массив
  }
}
template<class T>
void merge(T a[], long lb, long split, long ub)
 {
// Слияние упорядоченных частей массива в буфер temp
// с дальнейшим переносом содержимого temp в a[lb]...a[ub]
 
  // текущая позиция чтения из первой последовательности a[lb]...a[split]
  long pos1=lb;
 
  // текущая позиция чтения из второй последовательности a[split+1]...a[ub]
  long pos2=split+1;
 
  // текущая позиция записи в temp
  long pos3=0;
 
  T *temp = new T[ub-lb+1];
 
  // идет слияние, пока есть хоть один элемент в каждой последовательности
  while (pos1 <= split && pos2 <= ub) {
    if (a[pos1] < a[pos2])
      temp[pos3++] = a[pos1++];
    else
      temp[pos3++] = a[pos2++];
  }
 
  // одна последовательность закончилась -
  // копировать остаток другой в конец буфера
  while (pos2 <= ub)   // пока вторая последовательность непуста
    temp[pos3++] = a[pos2++];
  while (pos1 <= split)  // пока первая последовательность непуста
    temp[pos3++] = a[pos1++];
 
  // скопировать буфер temp в a[lb]...a[ub]
  for (pos3 = 0; pos3 < ub-lb+1; pos3++)
    a[lb+pos3] = temp[pos3];
 
  delete [] temp;
}
 
 
int main()
{
    {
        srand(time(NULL));
 
       int z,cn;
 
         for(int i=0;i<stringsize;i++)  //Присваивание значений элементам
           {
               //отвечает за кол-во букв в слове
              z=1+rand()%6;
 
              stringarray[i]=65+rand()%26;
              for(int j=1;j<z-1;j++)
                stringarray[i]+=65+rand()%26;
 
                 for(int j=0;j<i;j++)           //Проверка на повторение слов
                  {
                    if(stringarray[j]==stringarray[i])
                      {
                        stringarray[i].erase(1,4);
                        for(int r=0;r<4;r++)
                          stringarray[i]+=65+rand()%26;
                      }
                  }
           }
 
        cout<<"Odnomernyi massiv iz 100 elementov, v vide tablicy:"<<endl<<endl;
 
        for(int i=0;i<10;i++)     //Вывод на массива на экран
          {
            for(int j=0;j<10;j++)
              cout<<setw(7)<<stringarray[i*10+j];
            cout<<endl;
          }
         mergeSort(stringarray,0,stringsize);
 
            cout<<endl<<endl;
         for(int i=0;i<10;i++)     //Вывод на массива на экран
          {
            for(int j=0;j<10;j++)
              cout<<setw(7)<<stringarray[i*10+j];
            cout<<endl;
          }
    // a - сортируемый массив, его левая граница lb, правая граница ub
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2012, 15:50     Сортировка слиянием массива из строк
Посмотрите здесь:

Сортировка массива строк C++
C++ Сортировка массива си-строк
C++ Сортировка массива строк
C++ Сортировка массива строк
Сортировка строк массива C++
Сортировка слиянием C++
C++ Сортировка строк массива
C++ Сортировка слиянием не проходит тесты массива 10^5

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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