Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / массив в массив / 12 сообщений из 12, страница 1 из 1
19.10.2004, 13:55
    #32744442
mesmer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
мне тут в голову мысль навели(один товарищ),точнее озадачили:что есть возможность из одного массива не упорядоченного(массив в размере допустим 20 эл-тов, содержащим числа от 0 до 100),создать другой уже упорядоченный. все бы без проблем,но говорит он это делал без условий типа IF и всего за два-три захода.как понимаю все с for.может у кого какие мысли?
...
Рейтинг: 0 / 0
19.10.2004, 14:02
    #32744459
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
При таких условиях - тривиально. Допустим, исходный массив - A.

1. Выделяется массив B из ста нулей
2. Для каждого A делается B[A]++
3. Для каждого ненулевого B=N в результат попадают N элементов, равных i.
...
Рейтинг: 0 / 0
19.10.2004, 14:03
    #32744460
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
Код: plaintext
1.
2.
3.
4.
При таких условиях - тривиально. Допустим, исходный массив - A.

 1 . Выделяется массив B из ста нулей
 2 . Для каждого A делается B[A[i]]++
 3 . Для каждого ненулевого B[i]=N в результат попадают N элементов, равных i.
...
Рейтинг: 0 / 0
19.10.2004, 16:13
    #32744707
Siebentearbeit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
авторДля каждого ненулевого - Это if, я так понимаю?....
...
Рейтинг: 0 / 0
19.10.2004, 16:33
    #32744780
Sie
Sie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
к тому же, если числа порядка 100000 - надо такой массив забабахивать....

короче...
дайте мне шашкой помахать :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
int A[ 10 ] ={ 1002 , 99 , 23124 , 112 , 2 , 3 , 4 , 56 , 78 , 777 };
int B[ 10 ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
int size =  10 ;
int limit =  1 ;
while(limit)
{
	limit =  0 ;
	for (int i= 0 ; i<size; i++)
	{
		limit += !!A[i];
		A[i] -= !!A[i];
	}
	for (i=size-limit; i<size; i++)
		B[i]++;

}

условия в for'ах никак не обойти, можно тока соптимизировать, сводя цикл к нулю.
Тогда в коде "<" пропадут и будет совсем как без if
...
Рейтинг: 0 / 0
19.10.2004, 18:49
    #32745212
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
Siebentearbeit авторДля каждого ненулевого - Это if, я так понимаю?....
Почему? Это for (int j = 0; j < B ; j++) { }. Для нулевого B в результат попадают 0 элементов, вот и все.
...
Рейтинг: 0 / 0
20.10.2004, 10:10
    #32745742
Sie
Sie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
softwarerПочему?
Ок, верю.
А код можно посмотреть?
...
Рейтинг: 0 / 0
20.10.2004, 11:24
    #32745961
mesmer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
а для чего собственно массив 2 с нулевыми значениями?
...
Рейтинг: 0 / 0
20.10.2004, 12:31
    #32746156
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
Sie
Ок, верю.
А код можно посмотреть?
Примерно так. Правда, у меня сейчас нет под рукой C, так что - на яве.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  public static void main(String[] argv) {

    int A[] = {2, 3, 95, 8, 10, 45, 18, 60, 22, 8};
    int B[] = new int[100];
    int i, j, c;

    for (i = 0; i < A.length; i++) B[A[i]]++;
    for (i = 0, c = 0; i < B.length; i++)
      for (j = 0; j < B[i]; j++)
        A[c++] = i;
  }

Алгоритм, конечно, менее красивый, чем предложенный Sie, зато в означенный условиях - более быстрый :)
...
Рейтинг: 0 / 0
20.10.2004, 16:45
    #32746874
Sie
Sie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
Ничё, с красотой у него всё нармальна! :)
Тока с++ надо там за скобки цикла как-то вытащить, имхо...
...
Рейтинг: 0 / 0
20.10.2004, 17:44
    #32747057
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
SieТока с++ надо там за скобки цикла как-то вытащить, имхо...
Зачем? Можно, конечно, перекинуть к j++,c++ - но это сделает код менее понятным.
...
Рейтинг: 0 / 0
21.10.2004, 10:08
    #32747728
Sie
Sie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массив в массив
Всё, понял,.. это я код неправильно распознал, каюсь.
Всё правильно, с++ выносить не надо.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / массив в массив / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]