目的:ES6标准下的JS算法的一些实现代码。(作为记录和启发)
内容:排序和搜索算法(未完成,待继续)
一、基础算法
1、排序
1.1、冒泡排序
概念:冒泡排序比较所有相邻的两个项,如果第一个比第二个大,则交换他们。元素项向上移动至正确的顺序,就好像气泡升至表面一样。其复杂度是O(n2)。
1 const Compare = { 2 LESS_THAN: -1, 3 BIGGER_THAN: 1, 4 EQUALS: 0 5 }; 6 7 function defaultCompare(a, b) { 8 if (a === b) { 9 return Compare.EQUALS; 10 } 11 return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN; 12 } 13 14 function swap(array, a, b) { 15 /* const temp = array[a]; 16 array[a] = array[b]; 17 array[b] = temp; */ 18 [array[a], array[b]] = [array[b], array[a]]; 19 } 20 21 function bubbleSort(array, compareFn = defaultCompare) { 22 const {length} = array; 23 for (let i = 0; i < length; i++){ 24 for (let j = 0; j < length - 1; j++) { 25 if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) { 26 swap(array, j, j + 1); 27 } 28 } 29 } 30 return array; 31 } 32 33 function createNonSortedArray(size){ 34 var array = []; 35 for (let i = size; i > 0; i--){ 36 array.push(i); 37 } 38 return array; 39 } 40 41 const array = createNonSortedArray(5); 42 console.log(array); 43 console.log(bubbleSort(array))
1.2、改进的冒泡排序
说明:如果从内循环减去外循环中已跑过的轮数,就可以避免内循环中所有不必要的比较。其复杂度是O(n2)。
1 const Compare = { 2 LESS_THAN: -1, 3 BIGGER_THAN: 1, 4 EQUALS: 0 5 }; 6 7 function defaultCompare(a, b) { 8 if (a === b) { 9 return Compare.EQUALS; 10 } 11 return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN; 12 } 13 14 function swap(array, a, b) { 15 /* const temp = array[a]; 16 array[a] = array[b]; 17 array[b] = temp; */ 18 [array[a], array[b]] = [array[b], array[a]]; 19 } 20 21 function modifiedBubbleSort(array, compareFn = defaultCompare) { 22 const {length} = array; 23 for (let i = 0; i < length; i++){ 24 for (let j = 0; j < length - 1 - i; j++) { 25 if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) { 26 swap(array, j, j + 1); 27 } 28 } 29 } 30 return array; 31 } 32 33 function createNonSortedArray(size){ 34 var array = []; 35 for (let i = size; i > 0; i--){ 36 array.push(i); 37 } 38 return array; 39 } 40 41 const array = createNonSortedArray(5); 42 console.log(array); 43 console.log(modifiedBubbleSort(array))
2、搜索
二、简单应用
1、