一、冒泡排序
冒泡排序比较任何两个相邻的项,如果第一个比第二个大,则交换它们。元素项向上移动至正确位置,就好像气泡升至表面一样,冒泡算法因此得名。
代码实现:
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
}
多种搜索算法时间复杂度