几种典型的排序算法
Posted chauvet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了几种典型的排序算法相关的知识,希望对你有一定的参考价值。
1 // 冒泡排序 2 function swap(myArr, a, b) { 3 var temp = myArr[a]; 4 myArr[a] = myArr[b]; 5 myArr[b] = temp; 6 } 7 function bubbleSort(myArr) { 8 var len = myArr.length, 9 i, j,stop; 10 for (i = 0; i < len; i++) { 11 for (j = 0, stop = len - 1 - i; j < stop; j++) { 12 if (myArr[j] > myArr[j + 1]) { 13 swap(myArr, myArr[j], myArr[j + 1]); 14 } 15 } 16 } 17 return myArr; 18 } 19 20 // 选择排序 21 function selectionSort(myArr) { 22 var len = myArr.length, 23 min; 24 for (var i = 0; i < len; i++) { 25 // 将当前值设为最小值 26 min = i; 27 // 检查数组其余部分是否更小 28 for (var j = i + 1; j < len; j++) { 29 if (myArr[j] < myArr[min]) { 30 min = j; 31 } 32 } 33 34 // 如果当前位置不是最小值,将其替换为最小值 35 if (i != min) { 36 swap(myArr, i, min); 37 } 38 } 39 return myArr; 40 } 41 42 // 插入排序 43 function insertionSort(myArr) { 44 var len = myArr.length, 45 value, // 当前比较的值 46 i, // 未排序部分的当前位置 47 j; // 已排序部分的当前位置 48 for (i = 0; i < len; i++) { 49 // 储存当前位置的值 50 value = myArr[i]; 51 // 当已排序部分的当前元素大于value, 52 // 就将当前元素后移一位,再将前一位与value比较 53 for (j = i - 1; j > -1 && myArr[j] > value; j++) { 54 myArr[j + 1] = myArr[j]; 55 } 56 myArr[j + 1] = value; 57 } 58 return myArr; 59 } 60 61 // 合并排序 62 function merge(left, right) { 63 var result = [], 64 il, 65 ir; 66 while (il < left.length && ir < right.length) { 67 if (left[il] < right[ir]) { 68 result.push(left[il++]); 69 } else { 70 result.push(right[ir++]); 71 } 72 } 73 return result.concat(left.slice(il)).concat(right.slice(ir)); 74 } 75 76 function mergeSort(myArr) { 77 if (myArr.length < 2) {return myArr;} 78 79 var middle = Math.floor(myArr.length / 2), 80 left = myArr.slice(0, middle), 81 right = myArr.slice(middle), 82 params = merge(mergeSort(left), mergeSort(right)); 83 84 // 在返回的数组头部添加0和数组长度两个元素 85 params.unshift(0, myArr.length); 86 87 // 讲原来的数组替换为排序后的数组 88 myArr.splice.apply(myArr, params); 89 90 return myArr; 91 } 92 93 // 快速排序 94 function swapN(myArr, firstIndex, secondIndex) { 95 var temp = myArr[firstIndex]; 96 myArr[firstIndex] = myArr[secondIndex]; 97 myArr[secondIndex] = temp; 98 } 99 100 function patition(myArr, left, right) { 101 var pivot = myArr[Math.floor((left + right) / 2)], 102 i = left, 103 j = right; 104 while (i <= j) { 105 while (myArr[i] < pivot) { 106 i++; 107 } 108 while (myArr[j] > pivot) { 109 j--; 110 } 111 if (i <= j) { 112 swapN(myArr, i, j); 113 i++; 114 j++; 115 } 116 } 117 return i; 118 } 119 120 function quickSort(myArr, left, right) { 121 if (myArr.length < 2) return myArr; 122 123 left = (typeof left !== ‘number‘ ? 0 : left); 124 right = (typeof right !== ‘number‘ ? myArr.length - 1 : right); 125 126 var index = patition(myArr, left, right); 127 128 if (left < index - 1) { 129 quickSort(myArr, left, index - 1); 130 } 131 if (index < right) { 132 quickSort(myArr, index, right); 133 } 134 return myArr; 135 }
摘自阮一峰老师网站。
以上是关于几种典型的排序算法的主要内容,如果未能解决你的问题,请参考以下文章