javascript算法排序

一、冒泡排序
思路:1. 依次比较相邻的两个数,如果第一个比第二个小,则位置不变,如果第一个比第二个大,则位置调换, 一轮下来,最后一个是最大的数
         2.对除了最后一个之外的数重复第一步,直到只剩一个数
// 冒泡排序
var arr = [1,5,3,9,4];
for(var i = arr.length-1; i>0; i--){
for(var j = 0; j<i; j++){
var max = 0;
if(arr[j]>arr[j+1]){
max = arr[j];
arr[j] = arr[j+1];
arr[j+1] = max;
}
}
console.log(arr);
}
二、选择排序
思路:1.找出最小的数,和第一个交换位置
         2.在剩下的位置中,找出第二小的数,放在第二个
         3.依次类推
//选择排序
var arr2 = arr;
for(var i = 0; i<arr2.length; i++){
for(var j =i; j<arr2.length; j++){
var max = 0;
if(arr2[i]>arr2[j]){
max = arr2[i];
arr2[i] = arr2[j];
arr2[j] = max;
}
}
console.log("选择排序:"+arr2)
}
三、插入排序
思路:1.把数组分为【已排序】和【未排序】两部分,第一个数为【已排序】,其余为【未排序】
         2.从【未排序】抽出第一个数,和【已排序】部分进行比较,插入到合适的位置
//插入排序
var arr3 = [8,12,1,5,3,9,4];
for(var i = 0; i<arr3.length; i++){
for(var j = i; j > 0; j--){
var max;
if(arr3[j]<arr3[j-1]){
max = arr3[j];
arr3[j] = arr3[j-1];
arr3[j-1] = max;
}
}
console.log("插入排序:"+arr3);
}

四、合并排序
思路:1.不断将数组对半分,知道每一个数组只有一个
         2.将分出来的部分重新合并
         3.合并的时候按顺序排列
五、快速排序
思路:1.以一个数为基准,比这个数小的放在左边,比这个数大的放在右边
         2.再按此方法对着两部分数据分别进行快速排序

关于以上算法的时间复杂度和空间复杂度

排序法

最差时间分析 平均时间复杂度 稳定度 空间复杂度
冒泡排序 O(n2) O(n2) 稳定 O(1)
快速排序 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n)
选择排序 O(n2) O(n2) 稳定 O(1)
二叉树排序 O(n2) O(n*log2n) 不稳定 O(n)

插入排序

O(n2) O(n2) 稳定 O(1)
堆排序 O(n*log2n) O(n*log2n) 不稳定 O(1)
希尔排序 O O 不稳定 O(1)









猜你喜欢

转载自blog.csdn.net/qq_32439381/article/details/77373446
今日推荐