早就想總結下排序演算法,一直沒動手,這兩天有時間就自己動手總結寫寫,暫時還沒有區分內部排序或者外部排序,以及穩定性、時間複雜度、空間複雜度這些,看心情,想到哪個先寫哪個。
1. 選擇排序
i從0-max迴圈
每次都把(i+1)~ max中最小的值找出來,然後和i位置的元素進行交換
解:3, 5, 1, 2, 4, 7, 6
step 1:15 3 2 4 7 6
step 2:1 35 2 4 7 6 |
1 25 3 4 7 6
step 3:1 2 35 4 7 6
step 4:1 2 3 45 7 6
step 5:1 2 3 4 57 6
step 6:
1 5 3 2 4 67
function ******selectionsort(a)
}function tarheapsort(a)
if(lefta[right]) }}
return a;
}function heapsort(a)
return a2;
}test:
var a = [10,9, 8, 7, 6, 5, 4, 3, 2, 1]
a = [2,1,3,4,5,2,1,4,10,3,-1,3]
console.log(heapsort(a))
4. 快速排序(分治、遞迴)
看過經典的快排演算法,我自己寫的時候另外定義了left和right陣列,這樣是又占用了空間,但是很好理解,個人覺得也是快排。
function quicksort(a)
}test:
var a = [10,9, 8, 7, 6, 5, 4, 3, 2, 1]
a = [2,1,3,4,5,2,1,3,-1,2,100,2,1,3,4,0]
a = [1,2,1,2,3,1,1,1,1,1,1,1]
console.log(quicksort(a))
5. 基數排序(桶排序)
以前一直不理解基數排序,不能靜下心去想,今天終於有心思看明白了,並把**寫了出來。支援多位數的數字。
基數排序就是先定義10個桶,編號0-9,然後把陣列a中個位數等於桶的編號的數字放入對應桶中,最後按照桶的順序把數字再重新放回陣列a中。
然後清空桶,再把新的陣列a中十位數字等於桶的編號的數字放入對應桶中,最後按照桶的順序把數字再重新放回陣列a中。
。。。
依次迴圈
在第一次迴圈的時候,遍歷陣列的同時會找到最大的數字位數。比方說是3(百位數),那麼上面的迴圈進行三次。
**如下:
//基數排序(桶排序)
function radixsort(a)
radix = getnodigit(a[i],remainder-1);
if(typeof bucket[radix] == "object") else
}a =
for(var i=0; i<10; i++)
}if(remainder==maxdigit) else
}return a;
}function getnolength(n)
function getnodigit(n,i) else
}6. 歸併排序(又是遞迴、分治)
五一節後第一天,工作依然沒什麼事情,無奈,繼續寫排序,除此之外,不知道做什麼了。。。
歸併排序其實很簡單,就是把乙個陣列先拆成有序陣列,然後再合併有序陣列。
function mergesort(a) else if(n==2)
return a;
} else
}function mergearray(left, right)
var tem = [a[0]];
for(var i=1; in)
}for(var j=a.length; j>i; j--)
a[i] = n;
return a;
8. shell排序
function shellsort(a)
return a;
}function shellinsertsort(a, gap)
a[j+gap] = tem;}}
return a;
}
八大排序演算法
1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...
八大排序演算法
一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...
八大排序演算法
排序的定義 輸入 n個數 a1,a2,a3,an 輸出 n個數的排列 a1 a2 a3 an 使得a1 a2 a3 an in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基數排序 桶排序...