
一、冒泡排序
冒泡排序比較任何兩個相鄰的項,如果第一個比第二個大,則交換它們,元素項向上移動至正確位置,就好像氣泡升至表面一樣,冒泡演算法因此得名,
代碼實作:
function bubbleSort(arr){
letlength = arr.length
for(leti=0;i
for(letj=0;j
if(arr[j]>arr[j+1]){
swap(arr,j,j+1)
}
}
}
returnarr
}
function swap(arr,m,n){
lettmp = arr[m]
arr[m] = arr[n]
arr[n] = tmp
}
二、選擇排序

選擇排序是找出資料結構中的最小值并將其放在第一位,接著找到第二小的值并將其放在第二位,以此類推,
代碼實作:
function selectionSort(arr){
letlength = arr.length
for(leti=0;i
letmin = i
for(letj=i;j
if(arr[min]>arr[j]){
swap(arr,min,j)
}
}
}
returnarr
}
function swap(arr,m,n){
lettmp = arr[m]
arr[m] = arr[n]
arr[n] = tmp
}
三、插入排序
如果你在學習C/C++的程序中遇到了問題,可以來加入小編的企鵝圈問小編哦~小編很熱情的(●’?’●)
插入排序每次排一個陣列項,以此方法來構建最后的排序陣列,假定第一項已經排序了,然后它和第二項比較,第二項是應該待在原位還是插入第一項之前呢?接著第三項進行比較(它是插入第一、第二還是第三的位置呢?),以此類推,
代碼實作:
function insertSort(arr){
letlength = arr.length
for(leti=1;i
letj = i
while(arr[j]=0){
swap(arr,j,j-1)
j--
}
}
returnarr
}
function swap(arr,m,n){
lettmp = arr[m]
arr[m] = arr[n]
arr[n] = tmp
}
四、歸并排序

歸并排序是一種分治的方法,將原始陣列切分成較小的陣列,直到每個小陣列只有一個項,接著將小陣列合并成較大的陣列,直到最后只有一個排序完畢的大陣列,
代碼實作:
function mergeSort(arr){
letlength = arr.length
if(length==1){
returnarr
}
letmid =Math.floor(length/2)
letleft = arr.slice(0,mid)
letright = arr.slice(mid,length)
returnmerge(mergeSort(left),mergeSort(right))
}
function merge(left,right){
letres = []
letil =0
letir =0
while(il
if(left[il]
res.push(left[il])
il++
}else{
res.push(right[ir])
ir++
}
}
while(il
res.push(left[il])
il++
}
while(ir
res.push(right[ir])
ir++
}
returnres
}
五、快速排序
多種排序演算法時間復雜度

搜索演算法:
1. 順序搜索
順序或線性搜索是最基本的搜索演算法,它的機制是,將每一個資料結構中的元素和我們要找的元素做比較,順序搜索是最低效的一種搜索演算法,
代碼實作:
function sequentialSearch(arr,item){
letlen = arr.length
for(leti=0;i
if(arr[i] == item){
returni
}
}
return-1
}
2. 二分搜索
這個演算法要求被搜索的資料結構已排序,
(1) 選擇陣列的中間值,
(2) 如果選中值是待搜索值,那么演算法執行完畢(值找到了),
(3) 如果待搜索值比選中值要小,則回傳步驟1并在選中值左邊的子陣列中尋找,
(4) 如果待搜索值比選中值要大,則回傳步驟1并在選種值右邊的子陣列中尋找,
代碼實作:
/* 二分查找 */
function binarySearch(array,item){
/* 先將陣列排序 */
letarr = quickSort(array)
letlow =0, high = arr.length -1
letmid =0
while(low <= high){
mid =Math.floor((low + high)/2)
if(arr[mid]>item){
high = mid -1
}elseif(arr[mid]
low = mid +1
}else{
returnmid
}
}
return-1
}
多種搜索演算法時間復雜度

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/225533.html
標籤:其他
上一篇:《我們不一樣團隊》第二次作業:教室借用系統專案開題報告
下一篇:幾條管理學定律
