本文實例總結了JS數組排序技巧。分享給大家供大家參考,具體如下:
1、冒泡排序
~~~
var temp = 0;
for (var i = 0; i < array.length; i++)
{
for (var j = 0; j < array.length - i; j++)
{
if (array[j] > array[j + 1])
{
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
console.log(array);
~~~
2、sort排序
~~~
var arrSimple=new Array(1,8,7,6,2,5);
arrSimple.sort();
// document.writeln(arrSimple.join());
console.log(arrSimple.join())
~~~
3、 快速排序
~~~
function quickSort(arr){
if(arr.length<=1){//如果數組只有一個數,就直接返回;
return arr;
}
var num=Math.floor(arr.length/2);//找到中間數的索引值,如果是浮點數,則向下取整
var newValue=arr.splice(num,1);//找到中間數的值
var left=[],right=[];
for(var i=0;i<arr.length;i++){
if(arr[i]<newValue){
left.push(arr[i]);//基準點的左邊的數傳到左邊數組
}else{
right.push(arr[i]);//基準點的右邊的數傳到右邊數組
}
}
return quickSort(left).concat(newValue,quickSort(right));//遞歸不斷重復比較
}
console.log(quickSort([31,4,5,52,1,8]));
~~~
4、希爾排序
~~~
function shellSort(nums){//希爾排序
var gaps=[5,3,1];//定義間隔區間
for(var g=0;g<gaps.length;g++){//一個一個間隔值開始
for(var i=gaps[g];i<nums.length;i++){//以間隔值遍歷
var temp=nums[i];//選中元素
for(var j=i;j>=gaps[g]&&nums[j-gaps[g]]>temp;j-=gaps[g]){//如果前面一個大于后面一個
nums[j]=nums[j-gaps[g]];//后移
}
nums[j]=temp;//填補
}
}
}
function show(nums){//顯示數組
for(var i=0;i<nums.length;i++){
document.write(nums[i]+' ');
}
document.write('<br>');
}
var nums=[6,0,2,9,3,5,8,0,5,4];
show(nums);//6 0 2 9 3 5 8 0 5 4
shellSort(nums);//希爾排序
show(nums);//0 0 2 3 4 5 5 6 8 9
~~~
5、插入排序
~~~
function sort(elements){
//假設第0個元素是一個有序的數列,第1個以后的是無序的序列,
//所以從第1個元素開始將無序數列的元素插入到有序數列中
for(var i = 1; i < elements.length; i++){
//升序
if(elements[i] < elements[i-1]){
//取出無序數列中的第i個作為被插入元素
var guard = elements[i];
//記住有序數列的最后一個位置,并且將有序數列位置擴大一個
var j = i - 1;
elements[i] = elements[j];
//比大小,找到被插入元素所在的位置
while(j >= 0 && guard < elements[j]){
elements[j+1] = elements[j];
j--;
}
//插入
elements[j+1] = guard;
}
}
}
var elements = [10, 9, 8, 7, 6, 5];
console.log('before: ' + elements);
sort(elements);
console.log(' after: ' + elements);
~~~
6、選擇排序:
~~~
function order(arry){
var ary=arry
function sorrt() {
length = ary.length;
for (var i = 0; i < length; i++) {
_min = ary[i]
k = i
for (var j = i + 1; j < length; j++) {
if (_min > ary[j]) {
_min = ary[j]
k = j
}
}
ary[k] = ary[i]
ary[i] = _min
}
return ary;
}
return {sor:sorrt};
}
var k=order([14,12,6,5,18,0,1,3,2])
console.log(k.sor())
~~~
附:js中數組(Array)的排序(sort)注意事項
~~~
var arrDemo = new Array();
arrDemo[0] = 10;
arrDemo[1] = 50;
arrDemo[2] = 51;
arrDemo[3] = 100;
arrDemo.sort(); //調用sort方法后,數組本身會被改變,即影響原數組
alert(arrDemo);//10,100,50,51 默認情況下sort方法是按ascii字母順序排序的,而非我們認為是按數字大小排序
arrDemo.sort(function(a,b){return a>b?1:-1});//從小到大排序
alert(arrDemo);//10,50,51,100
arrDemo.sort(function(a,b){return a<b?1:-1});//從大到小排序
alert(arrDemo);//100,51,50,10
~~~
- 前端框架
- 進階攻略:前端最全的框架總結
- 進階攻略:前端完整的學習路線
- 進階攻略:最全的前端開源JS框架和庫
- 常用的六個富文本編輯器
- 移動端手勢的七個事件庫
- Bootstrap相關優質項目學習清單
- 三個Bootstrap免費字體和圖標庫
- jQuery實現多種切換效果的圖片切換的五款插件
- 移動端常用的四個框架
- 七個幫助你處理Web頁面層布局的jQuery插件
- 前端工具
- 八款前端開發人員更輕松的實用在線工具
- 推薦幾款好用的云筆記軟件
- 幾款在線的腦圖制作工具
- 細數那些年我用過的前端開發工具
- 九款優秀的企業項目協作工具推薦
- 細數那些帶打賞功能的平臺
- 干貨|幾個有用的問答平臺
- 前端資源
- web開發快速提高工作效率的一些資源
- 前端工程師們,這些干貨讓你開發效率加倍
- 那些我不得不收藏的技術網站
- 前端學習的幾個網站
- 老司機程序員用到的各種網站整理
- 前端幾個常用簡單的開發手冊拿走不謝
- 2017年度最流行的十大中國開源軟件
- 程序員常用的六大技術博客類
- 提高工作效率的幾個小技巧
- Bootstrap相關優質項目必備網址
- 前端技術棧
- h5調用底層接口的一些知識
- JS數組去重的6種算法實現
- Git安裝及密鑰的生成并上傳本地文件到GitHub上
- JS數組排序技巧匯總(冒泡、sort、快速、希爾等排序)
- 就如何快速免費提高網站排名小結
- 淺談移動端頁面無刷新跳轉問題的解決方案
- 移動端iPhone系列適配問題的一些坑
- HTML5在客戶端存儲數據的新方法——localStorage
- 移動開發之css3實現背景幾種漸變效果
- 前端雜談
- 程序員如何利用空余時間掙零花錢?
- 一個前端妹子的悲歡編程之路
- 【程序員交友】祈澈姑娘:假裝文藝與代碼齊飛的前端妹子
- 初中級前端開發工程師如何提升個人能力?
- 如何打造個人技術影響力
- 程序媛,堅持這幾個好習慣讓你越來越美
- 工作中如何快速成長和學習?
- 我是如何快速積累工作經驗
- 谷歌AI中國中心成立,人工智能勢不可擋?
- 前端面試
- 一份來自前端開發工程師的規范簡歷
- 2017前端精品面試文章總結
- 面試經歷:為即將找工作的你保駕護航
- 我的北漂之路 北漂如飲水,冷暖自知
- 如何在面試中脫穎而出?
- 2017年10大主流編程語言最新排行榜出爐
- 前端面試之前要準備的那些事