冒泡排序
a)比较两个相邻的元素,如果后一个比前一个大,则交换位置
b) 每次比较结果是把最大的依次放后面
function sort(element){
for(var i = 0;i<element.length-1;i++) {
for(var j = 0; j < element.length-i-1; j++){
if(element[j] > element[j+1]){
var swap = element[j]
element[j] = element[j+1]
element[j+1] = swap
}
}
console.log(element)
}
}
var element = [9,5,1,2,7,8,4,6,3];
console.log(sort(element))//[1, 2, 3, 4, 5, 6, 7, 8, 9]
二分法排序
a)获取中间元素,以中间元素把原数组切割成左右两个数组
b)余下元素和该元素对比,大于的放右边,小于的放左边
c)递归迭代
function twoSort(arr){
if(arr.length<=1){
return arr;
}
var middle = arr.splice(Math.floor(arr.length/2),1)
console.log(middle)
var leftArr = []
var rightArr = []
for(var i=0; i<arr.length; i++){
if(parseInt(arr[i])<=middle){
leftArr.push(arr[i]) //把比中间值小的放一个数组
}else{
rightArr.push(arr[i]) //把比中间值大的放另一个数组
}
}
return twoSort(leftArr).concat(middle,twoSort(rightArr))
}
var arr = [9,5,1,2,7,8,4,6,3];
var newArr = twoSort(arr);
console.log(newArr, 0)
插入排序
a)依次找出比前一项大的所有数
b)让它们依次和之前已经排序好的数列进行比较
function insertSort(arr) {
var len = arr.length
for(var i=1; i<len; i++) {
for(var j=i; j<len && arr[j-1]>arr[j]; j--) {
var temp = arr[j]
arr[j] = arr[j-1]
arr[j-1] = temp
}
}
return arr
}
console.log(insertSort([1,3,2,6,8,9,45,3,4]))
选择排序
a)假定第一个数为最小值,让余下的第一个作比较,如果比第一个更小,交换位置
b)再假定第二个为最小值,依次迭代
function selectSort(arr) {
var len = arr.length;
var minIndex, temp;
for(var i=0; i<len; i++) {
//先给一个索引号,假设i为最小的数
minIndex = i;
//循环遍历,如果i之后有比索引i更小的数,则将索引变为j
for(var j=i; j<len; j++) {
if(arr[j] < arr[minIndex]) {
minIndex = j;
}
}
//将i索引的数和j索引的数互换
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
console.log(selectSort([132,545,56,79,90,4,56,7,32]))