冒泡
function bubble(arr){
var len = arr.length-1
for (var i = 0; i < len; i++) {
// var min = i
for (var j = i+1; j <len-i; j++) {
if (arr[j]>arr[j+1]) {
var tmp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = tmp
};
};
};
return arr
}
arr = [366, 240, 866, 115, 447, 887, 308, 883, 871, 174, 17, 792, 721, 79, 613, 135, 108, 110, 666, 450, 36, 466, 934, 562, 841, 311, 847, 665, 830, 385, 110, 888, 731, 312, 862, 768, 568, 633, 88, 403, 944, 115, 45, 292, 95, 403, 686, 204, 334, 779, 973, 112, 674, 246, 212, 229, 309, 255, 645, 242, 527, 681, 565, 316, 320, 407, 493, 46, 992, 898, 886, 128, 88, 559, 302, 2, 369, 470, 328, 795, 264, 209, 17, 620, 290, 555, 942, 85, 118, 158, 927, 429, 986, 408, 917, 89, 86, 312, 355, 779, 700, 280, 583, 138, 786, 590, 933, 964, 321, 548, 758, 851, 746, 887, 815, 623, 969, 496, 823, 79, 65, 224, 257, 965, 112, 66, 231, 334, 28, 407, 248, 20, 395, 398, 498, 189, 217, 831, 354, 377, 836, 325, 248, 112, 885, 919, 172, 735, 569, 468, 300, 730, 853, 427, 766, 200, 267, 116, 634, 989, 624, 343, 316, 315, 540, 835, 563, 495, 798, 86, 9, 760, 553, 354, 232, 374, 450, 426, 944, 393, 602, 777, 146, 829, 674, 167, 808, 509, 730, 94, 152, 658, 656, 579, 720, 301, 269, 670, 75, 788, 589, 906, 531, 264, 358, 155, 247, 209, 503, 207, 951, 580, 282, 518, 119, 643, 429, 657, 446, 684, 950, 426, 324, 490, 46, 289, 138, 763, 57, 620, 465, 973, 466, 165, 897, 888, 181, 385, 554, 711, 346, 365, 437, 405, 241, 972, 607, 382, 465, 762, 678, 758, 426, 453, 321, 387, 590, 331, 363, 234, 374, 75, 840, 62, 66, 997, 521, 169, 23, 417, 377, 6, 393, 657, 889, 56, 156, 729, 448, 278, 515, 372, 936, 129, 81, 676, 466, 555, 790, 538, 750, 101, 878, 196, 477, 222, 384, 557, 475, 258, 456, 894, 127, 101, 887, 289, 257, 310, 271, 344, 226, 563, 778, 144, 871, 313, 486, 809, 692, 992, 877, 945, 862, 551, 540, 142, 941, 836, 646, 423, 311, 28, 516, 608, 784, 975, 100, 490, 51, 100, 608, 667, 289, 984, 825, 395, 113, 184, 896, 86, 594, 540, 597, 364, 153, 426, 83, 6, 686, 372, 415, 726, 168, 176, 336, 412, 67, 564, 404, 911, 741, 372, 508, 927, 728, 982, 209, 101, 207, 657, 577, 733, 926, 187, 561, 11, 370, 143]
res = bubble(arr)
console.log(res)
// console.log(arr)
堆排序
function heapSort(arr){
var len = arr.length
// heap(arr,0,arr.length)
buildMaxHeap(arr)
console.log(arr)
for (var i = arr.length - 1; i > 0; i--) {
// swap(arr,0,i)
swap(arr,0,i)
// console.log(i,arr)
len--
heap(arr,0,i)
// break
};
return arr
}
function buildMaxHeap(arr){
for(var i=Math.floor(arr.length/2);i>=0;i--){
heap(arr,i,arr.length)
}
return arr
}
// 调整子数为最大堆
// 合并两个有序数组
function heap(arr,start,end){
var left = 2*start + 1
var right = 2*start +2
var largest = start
if (left<end && arr[left]>arr[start]) {
largest = left
};
if (right<end && arr[right]>arr[largest]) {
largest = right
};
if (largest!==start) {
swap(arr,start,largest)
heap(arr,largest,end)
};
}
function swap(items, firstIndex, secondIndex){
var temp = items[firstIndex];
items[firstIndex] = items[secondIndex];
items[secondIndex] = temp;
}
arr = [366, 240, 866, 115, 9, 760, 553, 354, 232, 374, 450, 426, 944, 2,393, 143]
heapSort(arr)
console.log(arr)
console.log('--------------')
插入排序
function insertion(arr){
var len = arr.length
for (var i = 0; i < len; i++) {
// var min = i
for (var j = i+1; j <len; j++) {
if (arr[j]<arr[i]) {
var tmp = arr[i]
arr[i] = arr[j]
arr[j] = tmp
};
};
};
return arr
}
arr = [366, 240, 866, 115, 447, 887, 308, 883, 871, 174, 17, 792, 721, 79, 613, 135, 108, 110, 666, 450, 36, 466, 934, 562, 841, 311, 847, 665, 830, 385, 110, 888, 731, 312, 862, 768, 568, 633, 88, 403, 944, 115, 45, 292, 95, 403, 686, 204, 334, 779, 973, 112, 674, 246, 212, 229, 309, 255, 645, 242, 527, 681, 565, 316, 320, 407, 493, 46, 992, 898, 886, 128, 88, 559, 302, 2, 369, 470, 328, 795, 264, 209, 17, 620, 290, 555, 942, 85, 118, 158, 927, 429, 986, 408, 917, 89, 86, 312, 355, 779, 700, 280, 583, 138, 786, 590, 933, 964, 321, 548, 758, 851, 746, 887, 815, 623, 969, 496, 823, 79, 65, 224, 257, 965, 112, 66, 231, 334, 28, 407, 248, 20, 395, 398, 498, 189, 217, 831, 354, 377, 836, 325, 248, 112, 885, 919, 172, 735, 569, 468, 300, 730, 853, 427, 766, 200, 267, 116, 634, 989, 624, 343, 316, 315, 540, 835, 563, 495, 798, 86, 9, 760, 553, 354, 232, 374, 450, 426, 944, 393, 602, 777, 146, 829, 674, 167, 808, 509, 730, 94, 152, 658, 656, 579, 720, 301, 269, 670, 75, 788, 589, 906, 531, 264, 358, 155, 247, 209, 503, 207, 951, 580, 282, 518, 119, 643, 429, 657, 446, 684, 950, 426, 324, 490, 46, 289, 138, 763, 57, 620, 465, 973, 466, 165, 897, 888, 181, 385, 554, 711, 346, 365, 437, 405, 241, 972, 607, 382, 465, 762, 678, 758, 426, 453, 321, 387, 590, 331, 363, 234, 374, 75, 840, 62, 66, 997, 521, 169, 23, 417, 377, 6, 393, 657, 889, 56, 156, 729, 448, 278, 515, 372, 936, 129, 81, 676, 466, 555, 790, 538, 750, 101, 878, 196, 477, 222, 384, 557, 475, 258, 456, 894, 127, 101, 887, 289, 257, 310, 271, 344, 226, 563, 778, 144, 871, 313, 486, 809, 692, 992, 877, 945, 862, 551, 540, 142, 941, 836, 646, 423, 311, 28, 516, 608, 784, 975, 100, 490, 51, 100, 608, 667, 289, 984, 825, 395, 113, 184, 896, 86, 594, 540, 597, 364, 153, 426, 83, 6, 686, 372, 415, 726, 168, 176, 336, 412, 67, 564, 404, 911, 741, 372, 508, 927, 728, 982, 209, 101, 207, 657, 577, 733, 926, 187, 561, 11, 370, 143]
res = insertion(arr)
console.log(res)
// console.log(arr)
归并排序
function insertion(arr){
var len = arr.length
for (var i = 0; i < len; i++) {
// var min = i
for (var j = i+1; j <len; j++) {
if (arr[j]<arr[i]) {
var tmp = arr[i]
arr[i] = arr[j]
arr[j] = tmp
};
};
};
return arr
}
arr = [366, 240, 866, 115, 447, 887, 308, 883, 871, 174, 17, 792, 721, 79, 613, 135, 108, 110, 666, 450, 36, 466, 934, 562, 841, 311, 847, 665, 830, 385, 110, 888, 731, 312, 862, 768, 568, 633, 88, 403, 944, 115, 45, 292, 95, 403, 686, 204, 334, 779, 973, 112, 674, 246, 212, 229, 309, 255, 645, 242, 527, 681, 565, 316, 320, 407, 493, 46, 992, 898, 886, 128, 88, 559, 302, 2, 369, 470, 328, 795, 264, 209, 17, 620, 290, 555, 942, 85, 118, 158, 927, 429, 986, 408, 917, 89, 86, 312, 355, 779, 700, 280, 583, 138, 786, 590, 933, 964, 321, 548, 758, 851, 746, 887, 815, 623, 969, 496, 823, 79, 65, 224, 257, 965, 112, 66, 231, 334, 28, 407, 248, 20, 395, 398, 498, 189, 217, 831, 354, 377, 836, 325, 248, 112, 885, 919, 172, 735, 569, 468, 300, 730, 853, 427, 766, 200, 267, 116, 634, 989, 624, 343, 316, 315, 540, 835, 563, 495, 798, 86, 9, 760, 553, 354, 232, 374, 450, 426, 944, 393, 602, 777, 146, 829, 674, 167, 808, 509, 730, 94, 152, 658, 656, 579, 720, 301, 269, 670, 75, 788, 589, 906, 531, 264, 358, 155, 247, 209, 503, 207, 951, 580, 282, 518, 119, 643, 429, 657, 446, 684, 950, 426, 324, 490, 46, 289, 138, 763, 57, 620, 465, 973, 466, 165, 897, 888, 181, 385, 554, 711, 346, 365, 437, 405, 241, 972, 607, 382, 465, 762, 678, 758, 426, 453, 321, 387, 590, 331, 363, 234, 374, 75, 840, 62, 66, 997, 521, 169, 23, 417, 377, 6, 393, 657, 889, 56, 156, 729, 448, 278, 515, 372, 936, 129, 81, 676, 466, 555, 790, 538, 750, 101, 878, 196, 477, 222, 384, 557, 475, 258, 456, 894, 127, 101, 887, 289, 257, 310, 271, 344, 226, 563, 778, 144, 871, 313, 486, 809, 692, 992, 877, 945, 862, 551, 540, 142, 941, 836, 646, 423, 311, 28, 516, 608, 784, 975, 100, 490, 51, 100, 608, 667, 289, 984, 825, 395, 113, 184, 896, 86, 594, 540, 597, 364, 153, 426, 83, 6, 686, 372, 415, 726, 168, 176, 336, 412, 67, 564, 404, 911, 741, 372, 508, 927, 728, 982, 209, 101, 207, 657, 577, 733, 926, 187, 561, 11, 370, 143]
res = insertion(arr)
console.log(res)
// console.log(arr)
希尔算法
function shell(arr){
var len = arr.length
var h = 1
while(h<len/3){
h = 3*h+1
}
// console.log(h)
while(h>=1){
for (var i = 0; i < len; i=i+h) {
// // var min = i
for (var j = i+h; j <len; j=j+h) {
if (arr[j]<arr[i]) {
var tmp = arr[i]
arr[i] = arr[j]
arr[j] = tmp
};
};
};
h = parseInt(h/3)
}
return arr
}
arr = [366, 240, 866, 115, 447, 887, 308, 965, 112, 66, 231, 334, 28, 407, 248, 20, 395, 398, 498, 189, 217, 831, 354, 377, 836, 325, 248, 112, 885, 919, 172, 735, 569, 468, 300, 730, 853, 427, 766, 200, 267, 116, 634, 989, 624, 343, 316, 315, 540, 835, 563, 495, 798, 86, 9, 760, 553, 354, 232, 374, 450, 426, 944, 393, 602, 777, 146, 829, 674, 167, 808, 509, 730, 94, 152, 658, 656, 579, 720, 301, 269, 670, 75, 788, 589, 906, 531, 264, 358, 155, 247, 209, 503, 207, 951, 580, 282, 518, 119, 643, 429, 657, 446, 684, 950, 426, 324, 490, 46, 289, 138, 763, 57, 620, 465, 973, 466, 165, 897, 888, 181, 385, 554, 711, 346, 365, 437, 405, 241, 972, 607, 382, 465, 762, 678, 758, 426, 453, 321, 387, 590, 331, 363, 234, 374, 75, 840, 62, 66, 997, 521, 169, 23, 417, 377, 6, 393, 657, 889, 56, 156, 729, 448, 278, 515, 372, 936, 129, 81, 676, 466, 555, 790, 538, 750, 101, 878, 196, 477, 222, 384, 557, 475, 258, 456, 894, 127, 101, 887, 289, 257, 310, 271, 344, 226, 563, 778, 144, 871, 313, 486, 809, 692, 992, 877, 945, 862, 551, 540, 142, 941, 836, 646, 423, 311, 28, 516, 608, 784, 975, 100, 490, 51, 100, 608, 667, 289, 984, 825, 395, 113, 184, 896, 86, 594, 540, 597, 364, 153, 426, 83, 6, 686, 372, 415, 726, 168, 176, 336, 412, 67, 564, 404, 911, 741, 372, 508, 927, 728, 982, 209, 101, 207, 657, 577, 733, 926, 187, 561, 11, 370, 143]
res = shell(arr)
console.log(res)
// console.log(arr)
二分查找
// 二分查找
arr = [1,3,5,7,11,24,35,100]
function binarySearch(arr,n){
var end = arr.length,start = 0,res
while(end>start){
var mid = (end+start)>>1
if (arr[mid]>n) {
end = mid-1
};
if (arr[mid]<n) {
start = mid+1
};
if (arr[mid]==n) {
res = mid
break
};
}
if (res) {
console.log(res)
}else{
console.log('not exist')
}
}
binarySearch(arr,35)