Алгоритъм за разбъркване на масив, Много шум за 10 реда код...  | 
	 
	 
Здравейте ( Вход | Регистрация )
Алгоритъм за разбъркване на масив, Много шум за 10 реда код...  | 
	 
	 
			
			  10:25:41, 27-May-2010, Thursday
			
				 Коментар
					#1
					
				
			 
		 | 
	|
        	
				
					![]() BEST ENTRY award - зад.1/2008 Група: VIP Коментари: 597 Регистриран: 19.04.07 Град: Kюстендил Потребител № 539  | 
       
			
			 
				Това е един алгоритъм за разбъркване на масив, който измислих една вечер и реализирах на скоро. Идеята е следната: 
			
			1 - инициализирам масива с числата от 0 до n; 2 - избирам произволен елемент на масива; 3 - слагам го на пъво място, а този който е бил на първо взима неговото. Елементът който е с индекс 0 вече го считам за "разбъркан", затова при следващо избиране на произволен елемент него ще го прескачам. 2 - избирам произволен елемент от масива; 3 - този път той и втория елемен си разменят местата. Цикълът се повтаря докато не стигна n-1 избиране на елемент. Ето го и самият код: Код n=10 for(i=0; i<n; i+=1) array[i]=i for(i=0; i<n-1; i+=1){ rand=floor(random(n-i)+i) temp=array[i] array[i]=array[rand] array[rand]=temp } Ето и една снимка с малко разяснения: Хоризонтално са различни масиви; Вертикално са елементите на всеки масив. ![]() Какво е предимството: -При тестване на три алгоритъма за разбъркване на 1 000 и дори 10 000 елемента този се оказа най-бърз. -Този цикъл не прави излишни избирания на елементи и излишни проверки. Като пример мога да покажа един стар алгоритъм, който измислих преди доста време: Код n=1000 Представете си като стигне до момента в който с random(1000) трябва да се падне точно едно число. Да не говорим за по-голям масив. Другия алгоритъм с който го сравнявах (негов автор е krisis, измислен специално за играта "Сварка"), също имаше проверки, но беше доста по-бърз от този два реда по-нагоре. Остана да го тествам с алгоритъм на RaGiNGWhiSpeR, направен за играта "Сделка или не".for(i=0; i<n; i+=1) array[i]=0 for(i=0; i<n; i+=1){ array[i]=floor(random(n)) for(j=0; j<i; j+=1) if array[i]=array[j]{ i-=1 break } } Приложение: -Ако правите игра с карти естествено те трябва да се разбъкват, но да не се повтарят. Това е перфектно решение на проблема. Като заключение ще кажа че този алгоритъм е изцяло мой, но не изключвам възможността някой преди мен да го е измислил. Просто не съм потърсил в интернет. Качвам и програмката за тестване:  
 array_randomize.gmk ( 9.17k )
Брой сваляния: 3-------------------- "Последно: 18:05:07, 21.09.12" След две години мълчание пак проговори... 
					
		ИГРИ И ПРИМЕРИ НА САЙТА МИ!.  | 
	
| 
			
			 | 
	|
 
 яверт   Добре измислен алгоритъм, само това не мога да раз...   10:47:01, 27-May-2010, Thursday
 
 TALANTO   Цитат(яверт @ 11:47:01, 27-May...   11:23:39, 27-May-2010, Thursday![]() ![]()  | 
	
| Олекотена версия | Час: 06:48:30, 04.11.25 |