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

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

 1 . Выделяется массив B из ста нулей
 2 . Для каждого A делается B[A[i]]++
 3 . Для каждого ненулевого B[i]=N в результат попадают N элементов, равных i.
...
Рейтинг: 0 / 0
массив в массив
    #32744707
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторДля каждого ненулевого - Это if, я так понимаю?....
...
Рейтинг: 0 / 0
массив в массив
    #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
массив в массив
    #32745212
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siebentearbeit авторДля каждого ненулевого - Это if, я так понимаю?....
Почему? Это for (int j = 0; j < B ; j++) { }. Для нулевого B в результат попадают 0 элементов, вот и все.
...
Рейтинг: 0 / 0
массив в массив
    #32745742
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
softwarerПочему?
Ок, верю.
А код можно посмотреть?
...
Рейтинг: 0 / 0
массив в массив
    #32745961
mesmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а для чего собственно массив 2 с нулевыми значениями?
...
Рейтинг: 0 / 0
массив в массив
    #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
массив в массив
    #32746874
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
Ничё, с красотой у него всё нармальна! :)
Тока с++ надо там за скобки цикла как-то вытащить, имхо...
...
Рейтинг: 0 / 0
массив в массив
    #32747057
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SieТока с++ надо там за скобки цикла как-то вытащить, имхо...
Зачем? Можно, конечно, перекинуть к j++,c++ - но это сделает код менее понятным.
...
Рейтинг: 0 / 0
массив в массив
    #32747728
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
Всё, понял,.. это я код неправильно распознал, каюсь.
Всё правильно, с++ выносить не надо.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / массив в массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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