1. 冒泡排序算法: 即相邻的两个元素进行比较,如果前一个元素比后一个元素大,则将这两个元素换位,即将较大的元素后置。
内循环每走一次都会将前length - i个元素中的最大元素放到length - i 的位置上。
var data = [1, 49, 30, 80, 6, 2, 18, 15, 23, 78, 16, 5, 4, 2, 34, 35, 46, 18]
function bubble(arr) {
var length = arr.length
for (var i = 0; i < length; i++) {
for(var j = 0; j < length - 1 -i; j++) {
var temp = arr[j]
if (arr[j] > arr[j+1]) {
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
console.log(arr)
}
bubble(data)
2. 选择排序算法: 每次循环都选择最小值,然后将其与当前位置的值进行互换操作即可
function select(arr) {
var minIndex
var temp
for (var i = 0; i < arr.length-1; i++) {
minIndex = i
for(var j = i + 1; j < arr.lenght - i - 1; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j
}
}
temp = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = temp
}
console.log(arr)
}
select(data)
3. 插入排序: 如果前一个的值比当前值小则二者换位, 直到将这个碰见比前一个值小的数为止
function insert(arr) {
for (var i=1; i<arr.lenght; i++) {
var preIndex = i - 1
var current = arr[i]
while(preIndex >= 0 && arr[preIndex] > current) {
arr[preIndex+1] = arr[preIndex]
preIndex--
}
arr[preIndex+1] = current
}
console.log(arr)
}
insert(data)
4. 希尔排序: 先将arr分成arr.length/2组,其中index=1和index=length/2 + 1为一组,
如果length/2的值比较小则互换位置。重复操作,每次都将gap的值折半比较,
直到,gap唯1的时候排序操作结束。
function shell(arr) {
function swap(array, i, k) {
var temp = array[i]
array[i] = array[k]
array[k] = temp
}
var gap = Math.floor(arr.length / 2)
while(gap > 0) {
for(var i=gap; i<arr.length; i++) {
for(var j=i; j>0; j-=gap) {
if (arr[j-gap] > arr[j]) {
swip(arr, j-gap, j)
}
}
}
gap = Math.floor(gap / 2)
}
console.log(arr)
}
shell(data)
5. 归并排序: 通过递归的方式不断的合并两个有序数组完成数组的排序
function mergeSort(arr) {
var len = arr.length;
if (len < 2) {
return arr
}
var middle = Math.floor(len / 2)
var left = arr.slice(0, middle)
var right = arr.slice(middle)
return merge(mergeSort(left), mergeSort(right))
}
function merge(left, right) {
var result = [];
while (left.length && right.length) {
if (left[0] <= right[0]) {
result.push(left.shift());
} else {
result.push(right.shift());
}
}
while (left.length)
result.push(left.shift());
while (right.length)
result.push(right.shift());
return result;
}
console.log(mergeSort(data))
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。