![]() |
#6 |
Участник
|
Цитата:
X++: static void sortContainer(Args _args) { container con = [5,1,2,'Sumit Loya',9, 'Ashish singh', NoYes::No]; int len = conlen(con); // вычисляем только один раз! int i; int j; // принимаем значения любого типа // однако сравниваем как строки! int cmp(anytype a, anytype b) { // Здесь конечно надо бы возвращать три значения 1; 0; -1 // но раз уж используем метод пузырька, // упрощаем не сильно заморачиваясь по поводу производительности // главное - методика сравнение двух anytype значений return(SysQuery::value(a) > SysQuery::value(b) ) ? 1 : -1; // дает runtime error если внутри контейнера есть контейнер! // дает разные результаты, если выполняется в среде с разными языками } // меняем местами значения внутри контейнера void swapIf(int _i, int _j) { anytype a = conpeek(con, _i); // значения с типом anytype примут тип при первой инициализации anytype b = conpeek(con, _j); // повторные присваивания уже не изменят тип переменной anytype, // поэтому обмен приходится делать в локальном методе if( cmp(a, b) > 0 ) { con = conpoke(con, _j, a); con = conpoke(con, _i, b); } } ; conview(Con,"con: before"); // Sort the container for (i = 1; i < len; ++i) { for (j = i + 1; j <= len; ++j) { swapif(i, j); } } conview(Con,"con: after"); } Последний раз редактировалось mazzy; 22.04.2011 в 10:33. Причина: добавил инфу о runtime error, и о чувствительности к языку |
|
|
|