首先要明白什么是复杂程度?
时间复杂度指的是一个算法执行所耗费的时间
空间复杂度指运行完一个程序所需内存的大小
稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面
不稳定指,如果a=b,a在b的前面,排序后可能会交换位置
1.快速排序(不稳定)
原理:首先从原始数组中找到最小的元素,并把该元素放在数组的最前面,然后再从剩下的元素中寻找最小的元素,放在之前最小元素的后面,知道排序完毕。
时间复杂度:
最好情况是(n)
最差情况是(n*n)
function quickSort(arr){
if (arr.length <= 1) return arr;
var pivotIndex = Math.floor(arr.length/2);
var pivot = arr.splice(pivotIndex,1)[0];
var left = [];
var right = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return quickSort(left).concat([pivot],quickSort(right))
}
}
quickSort(arr)
2.冒泡排序 (稳定)
原理:依次比较相邻的两个值,如果后面的比前面的小,则将小的元素排到前面。依照这个规则进行多次并且递减的迭代,直到顺序正确。(从大到小/从小到大是根据自己判断的)
时间复杂度:
最好情况是(n*n)
最差情况是(n*n)
function sort(arr){
var temp = null;
for (var i = 0;i < arr.length-1; i++){
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
}
sort(arr)