排序算法
1冒泡排序
学习排序算法时,通常都先学冒泡算法,因为它在所有排序算法中最简单。然而,从运行时间的角度来看,冒泡排序是最差的一个。
冒泡排序比较任何两个相邻的项,如果第一个比第二个大,则交换它们。元素项向上移动至正确的顺序,就好像气泡升至表面一样,冒泡排序因此得名。
function sort(arr){
var len = arr.length;
for(var i = 0; i < len;i++){
for(var j = 0;j < len-1;j++){
if(arr[j]>arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp
}
}
}
return arr
}
2:选择排序:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
function select(arr){
for(var i = 0;i < arr.length-1;i++){
for(var j= i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
var t = arr[i];
arr[i] = arr[j];
arr[j] = t
}
}
}
return arr;
}
3:快速排序
快速排序是找出一个元素作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。
function quickSort(arr){
if(arr.length<=1){ return arr; } var midIndex = Math.floor(arr.length/2); var midValue = arr.splice(midIndex,1); var left = []; var right = []; for(var i = 0;i < arr.length; i++){ if(arr[i] < midValue){ left.push(arr[i]) }else{ right.push(arr[i]) } } return quickSort(left).concat(midValue,quickSort(right))
}
4 插入排序
插入排序:插入排序原理:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
function insertSort(arr){
var len = arr.length; for(var i = 1;i < len; i++){ if(arr[i] < arr[i-1]){ var ele = arr[i]; var j = i-1; arr[i] = arr[j]; while(j>=0 && ele<arr[j]){ arr[j+1] = arr[j]; j-- } arr[j+1] = ele; } } return arr;
}
5:归并排序
归并排序是一种分治算法。其思想是将原始数组切分成较小的数组,直到每个小数组只有一个位置,接着将小数组归并成较大的数组,直到最后只有一个排序完毕的大数组。
function merge(left, right) {
var result = [];
while(left.length > 0 && right.length > 0) {
if(left[0] < right[0]) {
result.push(left.shift());
}
else {
result.push(right.shift());
}
}
return result.concat(left).concat(right);
}
function mergeSort(arr){
if(arr.length==1) {
return arr
};
var mid=Math.floor(arr.length/2);
var left_arr=arr.slice(0,mid);
var right_arr=arr.slice(mid);
return merge(mergeSort(left_arr),mergeSort(right_arr));
}
var arr=[12,20,30,21,15,33,26,19,40,25]
mergeSort(arr)
搜索算法
1顺序搜索
顺序或线性搜索是最基本的搜索算法。它的机制是,将每一个数据结构中的元素和我们要找的元素做比较。顺序搜索是最低效的一种搜索算法。
以下是其实现:
this.sequentialSearch = function(item){
for (var i=0; i<array.length; i++){ //{1}
if (item === array[i]) //{2}
return i; //{3}
}
}
return -1; //{4}
};
2 :二分搜索
这个算法要求被搜索的数据结构已排序。以下是该算法遵循的步骤。
(1) 选择数组的中间值。
(2) 如果选中值是待搜索值,那么算法执行完毕(值找到了)。
(3) 如果待搜索值比选中值要小,则返回步骤1并在选中值左边的子数组中寻找。
(4) 如果待搜索值比选中值要大,则返回步骤1并在选种值右边的子数组中寻找
function binarySearch (arr,item){
//先排序
arr.sort(function(val1,val2){
return val1 - val2
})
var low = 0; var high = arr.length -1; var mid; var element; while(low <= high){ mid = Math.floor((low + high)/2);//中间索引 element = arr[mid]; if(item > element){ low = mid + 1; }else if(item < element){ high = mid -1; }else{ return mid }
} return -1;}
来源:https://www.cnblogs.com/CDtao/p/8509020.html