插入排序
/**
* 插入排序
* 首先设第一个元素为有序
* 从第二个起与前面的有序部分进行比较,比有序的小则有序的后移一位,否则插入
* @param {*} arr
*/
function insertSort(arr){
var len = arr.length
var preIndex, // 有序区的遍历序号
current
for (var i = 1
preIndex = i - 1
current = arr[i]
while (preIndex >= 0 && arr[preIndex] > current) {// current与有序区比较
arr[preIndex + 1] = arr[preIndex]
preIndex--
}
// 如果比较完了即preIndex=-1,current还是比有序的小,则current放在第一位
// 如果current比有序的大,则current要放在preIndex后面
arr[preIndex + 1] = current
}
return arr
}
- 5, 3, 7, 6, 1
- 5, 5, 7, 6, 1
- 3, 5, 7, 6, 1
- 3, 5, 7, 6, 1
- 3, 5, 7, 7, 1
- 3, 5, 6, 7, 1
- 3, 5, 6, 7, 7
- 3, 5, 6, 6, 7
- 3, 5, 5, 6, 7
- 3, 3, 5, 6, 7
- 1, 3, 5, 6, 7
- 1, 3, 5, 6, 7
快速排序
冒泡排序
/**
* 冒泡排序
* 两层循环,相邻元素比较,第一轮后最后一个是最大的
* 和选择排序第一轮后第一个是最小的相反
* @param {*} arr
*/
function bubbleSort(arr) {
var len = arr.length
for (var i = 0
for (var j = 0
if (arr[j] > arr[j+1]) { // 相邻元素两两对比
var temp = arr[j+1]
arr[j+1] = arr[j]
arr[j] = temp
}
}
}
return arr
}
选择排序
/**
* 选择排序
* 两层循环,第二层循环找出最小的数,
* 完了将值替换到第一层循环的当前序号,
* 直到第一层循环遍历完
* @param {*} arr
*/
function selectionSort(arr) {
var len = arr.length
var minIndex, temp
for (var i = 0
minIndex = i
for (var j = i + 1
if (arr[j] < arr[minIndex]) { // 寻找最小的数
minIndex = j
}
}
temp = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = temp
}
return arr
}
归并排序
blog.csdn.net/xiaoxiaojie…