Алгоритъм за разбъркване на масив, Много шум за 10 реда код... |
Здравейте ( Вход | Регистрация )
Алгоритъм за разбъркване на масив, Много шум за 10 реда код... |
![]()
Коментар
#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 } } Приложение: -Ако правите игра с карти естествено те трябва да се разбъкват, но да не се повтарят. Това е перфектно решение на проблема. Като заключение ще кажа че този алгоритъм е изцяло мой, но не изключвам възможността някой преди мен да го е измислил. Просто не съм потърсил в интернет. Качвам и програмката за тестване: ![]() -------------------- "Последно: 18:05:07, 21.09.12" След две години мълчание пак проговори...
ИГРИ И ПРИМЕРИ НА САЙТА МИ!. |
|
|
![]() ![]() |
Олекотена версия | Час: 05:46:09, 04.07.25 |