НовыйЧок |
Отправлено: 15.05.2006, 11:05 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
Доброе время суток!
Заранее извиняюсь если вопрос не по теме! Но мне очень нужно понять.
Прошу помощи!
Имеется список, содержащий элементы вида:
6-1-1-1
6-1-1-2
6-1-2-1
6-1-3-2
6-2-1-1
6-3-2-1
необходимо при выводе таких данных сортировать их, как показано выше.
Подскажите пожалуйста как можно реализовать такую сортировку.
Или где можно почитать об этом.
Заранее благодарен! |
|
Konstantine |
Отправлено: 15.05.2006, 11:24 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
не понял вопроса
|
|
olegenty |
Отправлено: 15.05.2006, 11:32 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
если данные строковые, то их надо парсить в числа, сортировать числа, потом привязываться обратно к строкам. если же это строковое представление какких-то числовых данных, то просто сортировать числа, и всё. хоть методом пузырька, хотя перестановки побыстрее будут. а вообще, можно воспользоваться TList/TStringList/etc::Sort, предварительно загнав элемены в соответствующий контейнер, или шаблоном sort, или функцией qsort. вариантов — как грязи.
Отредактировано olegenty — 15/05/2006, 13:05
|
|
CyberMind |
Отправлено: 15.05.2006, 11:52 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 29
|
Если тебе известны методы сортировки обычного одномерного массива, то достаточно ввести функцию (оператор) сравнения элементов твоего списка (пусть приведенный тобой список упорядочен по возрастанию) и задача свелась к предыдущей. Как ты хранишь свой список? |
|
НовыйЧок |
Отправлено: 16.05.2006, 07:38 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
QUOTE | Если тебе известны методы сортировки обычного одномерного массива, то достаточно ввести функцию (оператор) сравнения элементов твоего списка (пусть приведенный тобой список упорядочен по возрастанию) и задача свелась к предыдущей. Как ты хранишь свой список? |
Список хранится в БД (Ассес).В текстовом формате.
В список также могут входить элементы вида:
"6-5" и "6-5-1"
|
|
olegenty |
Отправлено: 16.05.2006, 10:41 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
декомпозиция до атомарности в совокупности с инструкцией order by в select — вот всё, что тебе нужно
|
|
CyberMind |
Отправлено: 16.05.2006, 11:19 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 29
|
Могу вот, что предложить. Считаем, что исходные данные хранятся в двумерном массиве:
CODE |
#include "stdio.h"
...
bool FirstLess(char *firstSTR, char *secondSTR)
{
int a, b, c, d, a1, b1, c1, d1;
sscanf(firstSTR, "%i-%i-%i-%i",&a, &b, &c, &d);
sscanf(secondSTR,"%i-%i-%i-%i",&a1, &b1, &c1, &d1);
if((a<a1)||
(a==a1 && b<b1)||
(a==a1 && b==b1 && c<c1) ||
(a==a1 && b==b1 && c==c1 && d<d1)
) return true;
return false;
}
void Order(char **list,int N)
{
char *tmp;
int i,j;
for(i=0;i<=N-1;i++)
{
for(j=0;j<=N-2-i;j++)
{
if(FirstLess(list[j+1],list[j]))
{
tmp = list[j];
list[j] = list[j+1];
list[j+1] = tmp;
}
}
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char **list;
list = new char *[8];
for(int i=0;i<8;i++)
list[i] = new char[8];
list[0]= "6-3-2-1<!--POST BOX-->";
list[1]= "6-1-1-1<!--POST BOX-->";
list[2]= "6-5<!--POST BOX-->";
list[3]= "6-1-3-2<!--POST BOX-->";
list[4]= "6-5-1<!--POST BOX-->";
list[5]= "6-1-1-2<!--POST BOX-->";
list[6]= "6-1-2-1<!--POST BOX-->";
list[7]= "6-2-1-1<!--POST BOX-->";
Order(list,8);
AnsiString rez;
for(int i=0;i<8;i++)
rez+= list[i]+AnsiString("\n");
ShowMessage(rez);
for(int i=0;i<8;i++)
delete list[i];
delete[] list;
}
|
Функция FirstLess будет сравнивать два твоих элемента списка, Order — упорядочивает список по "возрастанию"(можешь оптимизировать сортировку), Button1Click — пример вызова, в массив list я заталкал приведенные тобой элементы в произвольном порядке.
Ух ты! Символ конца строки не проходит, короче там где написано post box был слеш с ноликом
Отредактировано CyberMind — 16/05/2006, 11:24 |
|
НовыйЧок |
Отправлено: 16.05.2006, 12:37 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
СПАСИБО!!!!!!! Всем за помощь!!!!!!
Особенно CyberMind'у !!!!
Пример очень многое дал понять, даже и не по теме.
|
|
Guest |
Отправлено: 21.05.2006, 18:11 |
|
Не зарегистрирован
|
QUOTE (НовыйЧок @ 16/05/2006, 12:37) | СПАСИБО!!!!!!! Всем за помощь!!!!!!
Особенно CyberMind'у !!!!
Пример очень многое дал понять, даже и не по теме. |
Ребят.
Один из наиболее быстрых методов сортировки — алгоритм Хоара. |
|
Grigoriy |
Отправлено: 21.05.2006, 18:13 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (Guest @ 21/05/2006, 18:11) |
Ребят.
Один из наиболее быстрых методов сортировки — алгоритм Хоара. |
это мое сообщение
|
|