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

Сортировать в СтрингГрид по двум столбцам - C++

Восстановить пароль Регистрация
 
spectrum988
0 / 0 / 1
Регистрация: 24.10.2013
Сообщений: 47
27.05.2014, 22:03     Сортировать в СтрингГрид по двум столбцам #1
Приветствую всех участников форума.
У меня имеется StringGrid в первом столбце находятся текстовые данные во втором числовые.
Нужно отсортировать по возрастанию данные таблицы причем меняется местами должны два столбца.

Вот моя проба,но здесь я пробовал просто отсортировать 2 столбец.Программа компилируется но при нажатии на кнопку форма с StringGrid не появляется,а выбивает ошибку.
Код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
int n=StringGrid1->RowCount-1;
int *a,r;
a=new int[n];
for(i=0; i<=n;i++)
 a[i]=StrToInt(StringGrid1->Cells[2][i]);
for (i = 0; i <n-1;i++)
 for (j = i+1; j <n;j++)
  if (a[i] > a[j])
   {
   r = a[i];
   a[i] = a[j];
   a[j] = r;
   }
for (int i=0; i<StringGrid1->RowCount-1; i++)StringGrid1->Cells[2][i]=IntToStr(a[i]);
}
Посоветуйте пожалуйста может какой другой алгоритм на основе этого.

Добавлено через 1 час 6 минут
Немного переделанный метод,но плохо сортирует.
C++
1
2
3
4
5
6
7
8
9
10
11
int n=StringGrid1->RowCount-2;
AnsiString r;
for (i=1;i<n-1;i++)
 for (j=i+1;j<n;j++)
  if (StringGrid1->Cells[1][i]>StringGrid1->Cells[1][j])
   {
   r=StringGrid1->Cells[1][i];
   StringGrid1->Cells[1][i]=StringGrid1->Cells[1][j];
   StringGrid1->Cells[1][j]=r;
   }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2014, 22:03     Сортировать в СтрингГрид по двум столбцам
Посмотрите здесь:

Сортировать C++
Сортировать по возрастанию(по алфавиту) C++
C++ Сортировать матрицу
Сортировать массив по возрастанию C++
Сортировать фамилию и возраст C++
C++ Сортировать записи Student по возрасту
C++ Как сортировать массив
Как сортировать массив? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Prgrm101
3 / 3 / 3
Регистрация: 08.04.2014
Сообщений: 20
27.05.2014, 22:19     Сортировать в СтрингГрид по двум столбцам #2
Может так, правда, немного калично
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
   int i,j,max,count=SpinEdit1->Value;
   AnsiString buf;
   for(i=0;i<count;i++)
    {
    max=i;
    for(j=i+1;j<count;++j)
     if (StringGrid1->Cells[0][max]>StringGrid1->Cells[0][j]) {
       max=j;
     }
     if (i!=max) {
     buf=StringGrid1->Cells[0][max];
     StringGrid1->Cells[0][max]=StringGrid1->Cells[0][i];
     StringGrid1->Cells[0][i]=buf;
     buf=StringGrid1->Cells[1][max];
     StringGrid1->Cells[1][max]=StringGrid1->Cells[1][i];
     StringGrid1->Cells[1][i]=buf;
     }
    }
    int *a= new int[count];
    for(int i=0;i<count;i++)
      a[i]=StrToInt(StringGrid1->Cells[1][i]);
 
    buf=StringGrid1->Cells[0][0];
    for(i=1;i<count;++i)
     if (StringGrid1->Cells[0][i]==buf) {
                      j=i-1;
                      while(i<count && StringGrid1->Cells[0][i]==buf)
                        ++i;
                      buf=StringGrid1->Cells[0][i];
                      //ShowMessage(IntToStr(j)+" "+IntToStr(i));
                      for(int k=j;k<i;++k)
                        {
                         max=k;
                         for(int l=k+1;l<i;++l)
                          if (a[max]>a[l]) {max=l;}
                         if (k!=max) {
                           int buf1=a[k];
                           a[k]=a[max];
                           a[max]=buf1;
                         }
                        }
 
     }
     else buf=StringGrid1->Cells[0][i];
 
    for(int i=0;i<count;++i)
      StringGrid1->Cells[1][i]=IntToStr(a[i]);
 
    delete []a;
Yandex
Объявления
27.05.2014, 22:19     Сортировать в СтрингГрид по двум столбцам
Ответ Создать тему
Опции темы

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