Q: 为什么插入排序比冒泡排序更受欢迎?
排序算法 | 时间复杂度 | 是否基于比较 |
---|---|---|
冒泡、插入、选择 | O(n^2) | Y |
快排、归并 | O(n*logn) | Y |
桶、计数、基数 | O(n) | N |
function bubble(arr){
var len = arr.length;
var flag = false;
for(var i = 0; i<len-1;i++ ){
for(var j = 0; j < len -1 - i; j++){
var tmp = arr[j];
if(arr[j]>arr[j+1]){
arr[j] = arr[j+1];
arr[j+1] = tmp;
flag = true;
}
}
if(!flag) break;
}
return arr;
}
function insertSort(arr){
var len = arr.length;
for(var i = 1; i < len;++i){
var value = arr[i];
for(var j = i-1;j>=0;--j){
if(arr[j] > value){
arr[j+1] = arr[j];
}else break;
}
arr[j+1] = value;
}
return arr;
}
function seSort(arr){
var len = arr.length;
for(var i = 0; i < len -1; i++){
var min = i;
for(var j = i+1; j<len;j++){
if(arr[j]<arr[min]){
min = j;
}
}
if(min!=i){
var tmp = arr[min];
arr[min] = arr[i];
arr[i] = tmp;
}
}
return arr;
}
“有序度”: 是指数组中具有有序关系的元素队的个数。有序元素对用数学表示如下:
有序元素对:a[i] <= a[j], 如果 i < j。
“满有序度”:
$$
n*(n-1)/2
$$
逆序度 = 满有序度 - 有序度,【移动次数等于逆序度】
若使用链表这种数据结构,以上三种排序算法相应的复杂度会怎么变化?
原文:https://www.cnblogs.com/jiaweixie/p/11216284.html