时间复杂度为 0(n*n)
//选择排序算法的实现
// 主要思想是 从第i个开始 逐一与 n-i 个比较 这样一趟循环下来 第一个就是最大(最小)值
function selectSort(arr) {
var len = arr.length;
for(var i=0; i<len-1; i++)
for(var j=i+1; j<len; j++)
if(arr[i] > arr[j]){
var temp = arr[i];
arr[i] =arr[j]
arr[j] = temp
}
return arr;
}
//插入排序
// 算法思想是 从第i个开始 每次去 i-1 到 0 个一次比较 谁大谁小 保证0-i 是有序
function insertSort(arr){
var len = arr.length;
for(var i=1; i<len; i++) {
for(var j=i; j>0; j--)
if(arr[j] <arr[j-1]){
var temp = arr[j];
arr[j] = arr[j-1]
arr[j-1] = temp
} else{
break;
}
}
return arr;
}
//改进的插入排序算法
// 是小于当前值 则往后移一位
// else 时 则直接插入
function changeInsertSort(arr) {
var len = arr.length;
for(var i=1; i<len; i++) {
var x = arr[i];
console.log(x)
var j;
for(j=i; j>0; j--){
if(x < arr[j-1]) {
arr[j] = arr[j-1]
} else{
break;
}
}
arr[j] = x
}
return arr;
}
// 冒泡算法的实现
// 相邻两个元素比较 得出最大值 然后i+1 再相邻的比较 一趟下来 最后一个元素就是最大值了
function maopaoSort(arr) {
var len = arr.length;
for(var i=1; i<len; i++)
for(var j=0; j<len-i; j++) {
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
return arr;
}
// 冒泡算法的改进
//由于之前的冒泡算法是 每次符合条件每次都交换,但是这样的交换其实是多余的,只需记录好最大值的下标号,当一次循环结束时 直接与最后一个元素交换
function changeMaoPaoSort(arr) {
var len = arr.length;
for(var i=1; i<len; i++) {
var max = 0;
for(var j=0; j<len-i; j++) {
if(arr[max] < arr[j+1]){
max = j+1
}
}
if(max != len-i){
var temp = arr[max];
arr[max] = arr[len-i];
arr[len-i] = temp;
}
}
return arr;
}
综上
在o(n*n)的时间复杂度的排序算法中,改进的插入排序的效果是最好的。