知识分享:排序算法归纳,以及顺序查找、折半查找

73 阅读3分钟

一、冒泡排序

冒泡排序比较任何两个相邻的项,如果第一个比第二个大,则交换它们。元素项向上移动至正确位置,就好像气泡升至表面一样,冒泡算法因此得名。

代码实现:

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

}

多种搜索算法时间复杂度