本文實例講述了JS使用隊列對數組排列,基數排序算法。分享給大家供大家參考,具體如下:
/* * 使用隊列對數組排列,基數排序 *對于0~99的數字,基數排序將數組集掃描兩次。 * 第一次按個位上的數字進行排序, * 第二次按十位上的數字進行排序 * */ function Queue(){ this.dataStore = [];//存放隊列的數組,初始化為空 this.enqueue = enqueue;//向隊列尾部添加一個元素 this.dequeue = dequeue;//刪除隊首的元素 this.theFront = theFront;//讀取隊首的元素 this.back = back;//對取隊尾的元素 this.toStrings = toStrings;//顯示隊列內的所有元素 this.empty = empty;//判斷隊列是否為空 } function enqueue(element){ this.dataStore.push(element); } function dequeue(){ return this.dataStore.shift(); } function theFront(){ return this.dataStore[0]; } function back(){ return this.dataStore[this.dataStore.length-1]; } function toStrings(){ return this.dataStore; } function empty(){ if(this.dataStore.length == 0){ return true; }else{ return false; } } /*基數排序 * nums :需要排序的數組 * queues :數組,里面元素是隊列 * n :隊列的格式,這里為10個 * digit :傳入1,則先按個位上的數字排序;傳入10,則按十位上的數字排序 * */ function distribute(nums,queues,n,digit){ for(var i = 0;i < n;i++){ if(digit == 1){ queues[nums[i]%10].enqueue(nums[i]); }else if(digit == 10){ queues[Math.floor(nums[i]/10)].enqueue(nums[i]); }else{ } } } function collect(queues,nums){ var i = 0; for(var j = 0;j < 10;j++){ while(!queues[j].empty()){ nums[i++] = queues[j].dequeue(); } } } /*測試程序*/ var queues = []; for(var i = 0;i < 10;i++){ queues[i] = new Queue(); } var nums = []; for(var i = 0;i < 10;i++){ nums[i] = Math.floor(Math.random()*101); } console.log("開始的nums: "+nums);//24,72,90,84,49,69,8,30,50,0 distribute(nums,queues,10,1); collect(queues,nums); distribute(nums,queues,10,10); collect(queues,nums); console.log("排序后的nums: "+nums);//0,8,24,30,49,50,69,72,84,90
使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼,可得如下運行結果:
PS:這里再為大家推薦一款關于排序的演示工具供大家參考:
在線動畫演示插入/選擇/冒泡/歸并/希爾/快速排序算法過程工具:
http://tools.jb51.net/aideddesign/paixu_ys
更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數學運算用法總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript數組操作技巧總結》、《JavaScript排序算法總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript查找算法技巧總結》及《JavaScript錯誤與調試技巧總結》
希望本文所述對大家JavaScript程序設計有所幫助。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com