排序
(1000)小数据最快为快速排序,大数据最快为归并
1,冒泡排序
逐个冒泡到上面去
第一次的冒泡比较次数为当前长度-1
冒泡的比较次数一次比一次少,最后到达一次时结束
每次比较,比完后看结果进行位置交换
冒泡的总次数为长度-1
var arr = [3, 2, 9, 6, 4, 5, 1]
function bubbleSort(arry) {
for (i = 1; i < arry.length; i++) { //冒泡的次数
for (j = 0; j < arry.length - i; j++) { //冒泡的比较次数
if (arry[j] > arry[j + 1]) { //进行比较,交换位置
var temp = arry[j]
arry[j] = arry[j + 1]
arry[j + 1] = temp
}
}
}
}
bubbleSort(arr) //调用
console.log(arr); //打印
2,选择排序
每次选择当前的第一个数为最小值,把下标赋予min,这个值跟后面的所有去比较,如果比这个最小值小,把下标赋予给min
最后判断min是否是最初给的下标,不是就交换位置
var arr = [3, 2, 9, 6, 4, 5, 1]
function select(array) {
for (i = 0; i < array.length - 1; i++) {//
var min = i //设置最小数下标
for (j = i + 1; j < array.length; j++) {
if (array[min] > array[j]) { //如果比最小值都小,记录下标
min = j
}
}
if (min != i) { //不是最开始设置的最小数下标,换位置
temp = array[i]
array[i] = array[min]
array[min] = temp
}
}
}
select(arr)
console.log(arr);
3,插入排序
从后往前比,初始下标为1
下标为1与下标为0比
下标为2与下标为1和0比
依次…
var arr = [3, 2, 9, 6, 4, 5, 1]
function insertSort(array1) {
for (i = 1; i < array1.length; i++) {
for (j = i; j > 0; j--) {
if (array1[j - 1] > array1[j]) {
temp = array1[j]
array1[j] = array1[j - 1]
array1[j - 1] = temp
}
}
}
}
insertSort(arr)
console.log(arr);
4,快速排序
var arr = [2, 7, 5, 6, 4, 9, 3]
function quickSort(arr) {
if (arr.length <= 1) {
return arr
}
var centerTndex = parseInt(arr.length / 2)
var center = arr.splice(centerTndex, 1)[0]
var left = [] //左边的值
var right = [] //右边的值
for (i = 0; i < arr.length; i++) {
if (arr[i] > center) {
right.push(arr[i]) //大于中间值
} else {
left.push(arr[i]) //小于中间值
}
}
return quickSort(left).concat([center], quickSort(right)); //返回合并的值
}
console.log(quickSort(arr));