X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Сортировка двумерного массива, совет
Galeodor
Galeodor
Topic Starter сообщение 20.3.2009, 20:58; Ответить: Galeodor
Сообщение #1


Короч. Двумерный массив.
Размер=пусть будет например 5*5
Наполнение=рандомное.

Решился отсортировать его по возрастанию.
Первое что пришло в голову, перегнать в одномерный, сортирнуть пузырьком, перегнать в двумерный обратно.

Эт ладно, когда массив 5*5, а когда 1000*1000..эт ж я копм замучаю.

Вторая идея, тупо сортирнуть его методом пузырька.(ну там тупо перебирает, переставляет и т.д.).Это как?оптимально? или есть какая хитрая сортировка именно для многомерных массивов,которую и нигде не нашел?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 20.3.2009, 21:46; Ответить: ZiTosS
Сообщение #2


Приведи пример как толком должен отсортировать.

Двумерный массив понимает под собой строки и столбцы
|| -N- || -1- || -2- || -3- || -4- || -5- ||
------------------------------------------
|| -1- ||  6  |  4  |  2  |  6  |  9  |
------------------------------------------
|| -2- ||  3  |  5  |  9  |  0  |  4  |
------------------------------------------
|| -3- ||  2  |  2  |  7  |  8  |  1  |
------------------------------------------
|| -4- ||  9  |  1  |  0  |  6  |  8  |
------------------------------------------
|| -5- ||  7  |  3  |  2  |  1  |  5  |
------------------------------------------


Как его нужно отсортировать?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Galeodor
Galeodor
Topic Starter сообщение 20.3.2009, 21:58; Ответить: Galeodor
Сообщение #3


...)))))) я конечно не напишу щас всю матрицу


ну типа должно быть

|| -N- || -1- || -2- || -3- || -4- || -5- ||
------------------------------------------
|| -1- || 0 | 0 | 1 | 2 | 2 |
------------------------------------------
|| -2- || 3 | 4 | 4 | 5 | 6 |
------------------------------------------
и т.д. :unsure:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Galeodor
Galeodor
Topic Starter сообщение 20.3.2009, 22:18; Ответить: Galeodor
Сообщение #4


а...слышь, парни, а я могу работать с адресами ячеек памяти? типа если по этому адресу число больше чем по следующему то перставить, и т.д. методом пузырька?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 21.3.2009, 10:52; Ответить: ZiTosS
Сообщение #5


Galeodor, язык то хоть какой? В php если что нет указателей, если Cи или С++ то можно.

Вот посмотри ссылку, там 3 метода сортировки
_http://www.vzmakh.ru/info/pascal/modules/page14.html

А как ты показал, сортировку можно осуществить только для одномерного массива.
Если ты будешь работать с указателями, то тогда можно и методом пузырька воспользоваться :unsure:
Могу объяснить как будет идти указатель по массиву.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Galeodor
Galeodor
Topic Starter сообщение 21.3.2009, 12:57; Ответить: Galeodor
Сообщение #6


а не пох какой язык? :) мне алгоритм нужен а не решение :)

вот про указатели расскажи плиз, я понял, что они ссылаются на ячейку памяти, при прибавлении const к указателю изменяется не переменная, на которую он ссылается,а адрес ячейки памяти перескакивает на константу.
Можешь либо ссыль дать на указатели с объяснениями, либо тут если не лень :)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 22.3.2009, 1:11; Ответить: ZiTosS
Сообщение #7


вот тут можно почитать подробнее
Введение в язык Си

Мой пример с указателями
int massiv[5] = {5,7,10,16,1}; //объявляем массив
int *point; //объявляем указатель
point = massiv; // передаём указателю адрес на 0 элемент массива, идентично point = &massiv[0]

printf("Выбранное число: %d", *point); // *point - взятие значения по адресу (выведет число 5)

point++; // сдвинули адрес указателья на следующую ячейку

printf("Выбранное число: %d", *point); // выведет число 7

*point++; // прибавили к значению в ячейке 1-ку

printf("Выбранное число: %d", *point); // выведет число 8


То есть в краткости суть.
1) При объявдении указателя нужно указать:
тип_на_который_ссылается *имя_указателя;

2) *имя_указателя - взятие значения по адресу
имя_указателя - адрес на который ссылается указатель
3) Изменил значение в указателе, изменил и зачение переменной, на которую он ссылается.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Galeodor
Galeodor
Topic Starter сообщение 22.3.2009, 11:37; Ответить: Galeodor
Сообщение #8


вот за код с массивом и выводом офигенное спасибо. Все сразу понятно стало.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Galeodor
Galeodor
Topic Starter сообщение 22.3.2009, 20:52; Ответить: Galeodor
Сообщение #9


прошу код проверить. Он работает. все кул. тупо на оптимизацию.

Сортировка массива 3*3 из случайных чисел по возрастанию.
# include <stdio.h>
# include <stdlib.h>
# include <conio.h>
void main()
{
int mas[3][3];
int i,j;
clrscr();
randomize();
//заполняю массив из случайных чисел
for (i=0;i<3;++i)
    {
    for (j=0;j<3;++j)
    mas[i][j]=random(100);
    }

//вывожу заполненный несортированный массив
for (i=0;i<3;++i)
    {
    for (j=0;j<3;++j)
    printf("%d\t",mas[i][j]);
printf("\n");
    }
getch();



int *m;
m=&mas[0][0];

//методом пузырька сортирую по возрастанию исходя из того, что число из предыдущей учейки памяти больше чем в следующей ячейке
int a=8;
while (a>=0)
    {
    for (i=0;i<a;++i)

    if (*(m+i)>*(m+i+1))
        {
    int per;
    per=*(m+i+1);
    *(m+i+1)=*(m+i);
    *(m+i)=per;
        }
a--;
    }
//вывожу отсортирный массив
for (i=0;i<3;++i)
    {
    for (j=0;j<3;++j)
    printf("%d\t",mas[i][j]);
printf("\n");
    }
getch();
//конец...
}
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 23.3.2009, 11:10; Ответить: ZiTosS
Сообщение #10


В аське с тобой говаорили
1) Вместо твоего while можно использовать for
2) С указателями можно работать как с массивами.
*(m+i) -> m[i]
*(m+i+1) -> m[i+1]


Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Нужна помощь с DLE (сортировка новостей)
0 dimonsuper 3216 7.1.2015, 15:19
автор: dimonsuper
Открытая тема (нет новых ответов) Запись массива в БД (200 RUR)
3 pjotr 3493 7.2.2013, 15:41
автор: -A1ex-
Открытая тема (нет новых ответов) Из многомерного массива создать папки [СРОЧНО]
9 LifeUP 6215 20.8.2012, 20:05
автор: -HTMLandPHP-
Открытая тема (нет новых ответов) Сортировка
5 Tigor.v 8201 14.2.2011, 22:03
автор: -Tigor.v-


 



RSS Текстовая версия Сейчас: 19.4.2024, 3:56
Дизайн