| 
	
		
	
		 |  | 
	
		 | 
			
				На: Задачка на сообразительность 
					Добавлено: 17 янв 19 2:03
				  | 
			 
				
					
						Автор: kondrat Без умения писать строки, - точно не появится. |  
  |  
 Совершенно точно, как и без умения говорить, пить, смотреть, читать, просыпаться утром, засыпать вечером и т.д. и т.п. Вы на редкость проницательны!   
					 
				  | 
			 
				 | 
			 
		  | 
	
		 |  | 
	
		 | 
			
				На: Задачка на сообразительность 
					Добавлено: 17 янв 19 5:06
				  | 
			 
				
					
						Автор: гость
 
 
  ну, если комп не самый древний, то следующий код выполнится где-то за 100-200 мс:
  //C++ Builder
  int a=1000000; //количество элементов в массиве int i=0; //счетчик цикла int s=0;   //переменная, содержащая случайный номер элемента массива int prom=0; //вспомогательная переменная
  //массив со значениями и инициализация его (от 1 до а) int * data = new int [a];  for (i=0; i<a; i++) {data[i]=i;}
  //проходим весь массив по порядку и для каждого элемента подбираем //случайную пару, далее меняем их местами for (i=0; i<a; i++) { s= random(a); //меняем местами порядковый элемент и случайно выбранный prom = data[s]; data[s]= data[i];  data[i]= prom; } |  
  |  
 О!!! Сразу видно руку мастера! Спасибо! То что доктор прописал! Всё как Вы сказали 100-200мс  Не зря советовали мне этот форум, как хотя и бесноватый, но с присутствием реальных профи.    
					 
				  | 
			 
				 | 
			 
		  | 
	
		 |  | 
	
		 | 
			
				На: Задачка на сообразительность 
					Добавлено: 17 янв 19 7:07
				 
					Изменено: 17 янв 19 7:10
				  | 
			 
				
					
						Дело не в кодинге.
  Во первых моська бросила вызов.
  Во вторых - голову нельзя заставить не работать. Верно и обратное.
  77.247 - вам понадобилось 2млн итераций.
  А слабо за 1млн?!
  Или фантазии не хватает...
  PS И перестаньте комментировать каждую строчку кода. Уж лет так 10 это плохой стиль. Комментарий - признак тухлятины (code smell)
					 
				  | 
			 
				 | 
			 
		  | 
	
		 | 
			
				На: Задачка на сообразительность 
					Добавлено: 17 янв 19 8:13
				  | 
			 
				
					
						Автор: kondrat
 
  Присоединяюсь и одобряю код mss. Вот, ваще летает, и каждый раз по-новому, с хорошим качеством:
      const long N = 999999;     long *a, p, i;     mt19937 mersenne(static_cast<unsigned int>(time(0)));
      a = new long[N+1];     for (i=0; i<N+1; i++) a[i]=i;     cout << "a[N] = " << a[N] << endl;     for (i=0; i<N+1; i++) {         p = mersenne()%(N+1);         a[i] = a[p];         a[p] = i;     }     cout << "a[N] = " << a[N] << endl;     delete a;
 
 
 
  |  
  |  
 Да, всётаки Ваш код лучше, за счет утилизации временной переменной которая равна i он немного быстрее. Спасибо! Вы выйграли! В итоге буду юзать:  vector<int> mix(int N) { 	mt19937 mersenne(time(0));
  	int *a = new int[N]; 	for (int i = 0; i < N; i++) a[i] = i; 	for (int i = 0; i < N; i++) 	{ 		int p = mersenne() % (N); 		a[i] = a[p]; 		a[p] = i; 	}
  	vector<int> res(a, a + N); 	delete[] a; 	return res; }
 
   
					 
				  | 
			 
				 | 
			 
		  | 
	
		 |  | 
	
		 | 
			
				На: Задачка на сообразительность 
					Добавлено: 17 янв 19 8:38
				  | 
			 
				
					
						Автор: гость
  	for (int i = 0; i < N; i++) a[i] = i+1; 	for (int i = 0; i < N; i++){***}
 
 
  |  
  |  
 Итого - 2млн итераций   Для тех кто на бронепоезде повторяю - за 1млн    	int next = 0; 	for (int i=0; i < N; ){ 		int p = mersenne() % (N); 		a[i] = a[p];  		a[p] = ++next; 		for(; i<N && n[i]!=0; i++); 	}
 
  
					 
				  | 
			 
				 | 
			 
		  | 
	
		 | 
			
				На: Задачка на сообразительность 
					Добавлено: 17 янв 19 8:43
				  | 
			 
				
					
						Хе-хе. Если вам нужно ускорить какой-то код, смотрите в сторону malloc/free, которые хоть и кодонебезопасны, но более низкоуровневые и гибкие.
					 
				  | 
			 
				 | 
			 
		  | 
	
		 | 
			
				На: Задачка на сообразительность 
					Добавлено: 17 янв 19 8:55
				  | 
			 
				
					
						Автор: Михайло
  Хе-хе. Если вам нужно ускорить какой-то код, смотрите в сторону malloc/free, которые хоть и кодонебезопасны, но более низкоуровневые и гибкие. |  
  |  
 в цпп new/delete тоже самое, только короче, 1 в 1, нет ни % издержек, учите матчасть салага    
					 
				  | 
			 
				 | 
			 
		  | 
	
		 | 
			
				На: Задачка на сообразительность 
					Добавлено: 17 янв 19 9:02
				  | 
			 
				
					
						new помимо выделения памяти производит инициализацию её, а это скорее всего избыточная операция, лошара. Хо-хо!
					 
				  | 
			 
				 | 
			 
		  | 
	
		 | 
			
				На: Задачка на сообразительность 
					Добавлено: 17 янв 19 9:10
				  | 
			 
				
					
						Автор: mss
 
 
  Итого - 2млн итераций  
  Для тех кто на бронепоезде повторяю - за 1млн  
  	int next = 0; 	for (int i=0; i < N; ){ 		int p = mersenne() % (N); 		a[i] = a[p];  		a[p] = ++next; 		for(; i<N && n[i]!=0; i++); 	}
 
  |  
  |  
  что за n[i]? напишите полный код плиз, у меня не вышло чтото разумное с ним пока получить
					  
				  | 
			 
				 | 
			 
		  | 
	
		 | 
			
				На: Задачка на сообразительность 
					Добавлено: 17 янв 19 9:34
				 
					Изменено: 17 янв 19 9:37
				  | 
			 
				
					
						int data[1000000]; int buf[1000000]; // инициализация массива for int (i=0; i<1000000;i++)  { data[i]=i;    buf[i]=irand()%999000000; } // Дальше применяем алгоритм быстрой сортировки, в связке data и buf //  Быстрая сортировка - вики
					 
				  | 
			 
				 | 
			 
		  | 
	
		 | 
			
				На: Задачка на сообразительность 
					Добавлено: 17 янв 19 9:39
				 
					Изменено: 17 янв 19 9:41
				  | 
			 
				
					
						Автор: гость  что за n[i]? напишите полный код плиз, у меня не вышло чтото разумное с ним пока получить |  
  |  
 пардонте... а так?  vector<int> mix(int N) { 	mt19937 mersenne(time(0));
  	int *a = new int[N]; // здесь должны быть нули я пологаю
  	int next = 0; 	for (int i=0; i < N; ){ 		int p = mersenne() % (N); 		a[i] = a[p];  		a[p] = ++next; 		for(; i<N && a[i]!=0; i++); 	}
  	vector<int> res(a, a + N); 	delete[] a; 	return res; }
 
  
					 
				  | 
			 
				 | 
			 
		  | 
	
		 |