冒泡排序 冒泡排序是一种基本的排序算法。它的基本思想是通过相邻元素之间的比较和交换来达到排序的目的。它的时间复杂度是 O(n^2)。
function bubbleSort ( arr ) {
for ( let i = 0 ; i < arr. length - 1 ; i++ ) {
for ( let j = 0 ; j < arr. length - i - 1 ; j++ ) {
if ( arr[ j] > arr[ j + 1 ] ) {
let temp = arr[ j] ;
arr[ j] = arr[ j + 1 ] ;
arr[ j + 1 ] = temp;
}
}
}
return arr;
}
快速排序 快速排序是一种常用的排序算法,也是一种分治法的应用。它的基本思想是通过一次快速排序将待排序序列分割成两个子序列,其中一个子序列的所有元素均小于另一个子序列的所有元素。它的时间复杂度是 O(nlogn)。
function quickSort ( arr ) {
if ( arr. length <= 1 ) {
return arr;
}
let pivotIndex = Math. floor ( arr. length / 2 ) ;
let pivot = arr[ pivotIndex] ;
let left = [ ] ;
let right = [ ] ;
for ( let i = 0 ; i < arr. length; i++ ) {
if ( i === pivotIndex) {
continue ;
}
if ( arr[ i] < pivot) {
left. push ( arr[ i] ) ;
} else {
right. push ( arr[ i] ) ;
}
}
return quickSort ( left) . concat ( [ pivot] , quickSort ( right) ) ;
}
插入排序 插入排序是一种简单直观的排序算法。它的基本思想是将待排序序列分为已排序和未排序两部分,然后每次从未排序的部分选择一个元素插入到已排序的部分中的合适位置上。它的时间复杂度是 O(n^2)。
function insertionSort ( arr ) {
for ( let i = 1 ; i < arr. length; i++ ) {
let current = arr[ i] ;
let j = i - 1 ;
while ( j >= 0 && arr[ j] > current) {
arr[ j + 1 ] = arr[ j] ;
j-- ;
}
arr[ j + 1 ] = current;
}
return arr;
}
选择排序 选择排序是一种简单直观的排序算法。它的基本思想是每次选择待排序序列中的最小元素,然后将其放到已排序序列的末尾。它的时间复杂度是 O(n^2)。
function selectionSort ( arr ) {
for ( let i = 0 ; i < arr. length - 1 ; i++ ) {
let minIndex = i;
for ( let j = i + 1 ; j < arr. length; j++ ) {
if ( arr[ j] < arr[ minIndex] ) {
minIndex = j;
}
}
if ( minIndex !== i) {
let temp = arr[ i] ;
arr[ i] = arr[ minIndex] ;
arr[ minIndex] = temp;
}
}
return arr;
}
斐波那契数列 斐波那契数列是一种经典的数学问题,它可以用递归或迭代的方式求解。斐波那契数列的定义是: F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) (n≥2)。斐波那契数列在计算机科学中有着广泛的应用,例如在算法设计和密码学等领域。
function fibonacci ( n ) {
if ( n <= 0 ) {
return 0 ;
}
if ( n === 1 || n === 2 ) {
return 1 ;
}
let a = 1 ;
let b = 1 ;
let c = 0 ;
for ( let i = 3 ; i <= n; i++ ) {
c = a + b;
a = b;
b = c;
}
return c;
}