js算法

冒泡
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值