【JS小白】学习冒泡排序、选排排序、插入排序
本文都以升序为例。
冒泡排序
左右交换,每回合排好一个最大的。
伪代码:
i是回合的计数,从0开始计数。
j和j+1是每次比较并可能交换的两个位置。
(arr):
i:[0,n-1)
j:[0,n-1-i)
if [j]>[j+1]
swap(j,j+1)
i也可以直接表示每一回合将会排好顺序的位置。
(arr):
i:[n-1,0)
j:[0,i)
if( [j] > [j+1])
swap(j,j+1)
JS代码测试
function bubbleSort_1(arr){
if(arr instanceof Array === false){
return;
}
for(let i = 0; i < arr.length - 1; i++){
for(let j = 0; j < arr.length - 1 - i; j++){
if(arr[j] > arr[j+1]){
swap(arr, j, j+1);
}
}
}
return arr;
}
function swap(arr, i, j){
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
function bubbleSort_2(arr){
for(let i = arr.length - 1; i > 0; i--){
for(let j=0; j < i; j++){
if(arr[j] > arr[j+1]){
swap(arr, j, j+1);
}
}
}
return arr;
}
console.log(bubbleSort_1([1,5,8,3,7,3,0,4,-3,-6]));
console.log(bubbleSort_2([1,5,8,3,7,3,0,4,-3,-6]));
选择排序
每一回合选择一个最小的元素,然后放到最左边。
也可以选最大的,放到右边,但下面以选择最小的为例。
伪代码:
i表示该回合将会被排好顺序的位置
i:[0,n-1)
minIndex=i
j:[i+1,n)
if([j]<[minIndex])
minIndex=j
swap(minIndex,i)
JS代码测试
function selectSort(arr){
let n=arr.length;
for(let i=0; i<n-1;i++){
let minIndex=i;
for(let j=i+1;j<n;j++){
if(arr[j]<arr[minIndex]){
minIndex=j
}
}
swap(arr,i,minIndex)
}
return arr
}
function swap(arr, i, j){
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
console.log(selectSort([1,5,8,3,7,3,0,4,-3,-6]));
插入排序
往有序的列表中插入元素。
对于数组,刚开始第0个元素时有序的,然后将第1个插入,这样0、1就是有序的,然后插入第2个元素,这样0、1、2都是有序的...
i表示当前回合被插入的元素,在i前面的都是有序的。
从0开始的话,其前面的有序列表是空的,数据不会有交换。所以从位置1开始即可。
伪代码:
i:[1,n)
preIndex=i-1
cur=[i]
while (preIndex>-1 && [preIndex]>cur):
[preIndex+1]=[preIndex]
preIndex--
[preIndex+1]=cur
JS代码测试
function insertSort(arr){
let n = arr.length;
for(let i=1;i<n;i++){
let preIndex=i-1;
let cur = arr[i]
while(preIndex>-1 && arr[preIndex]>cur){
arr[preIndex+1]=arr[preIndex]
preIndex--
}
arr[preIndex+1]=cur
}
return arr;
}
console.log(insertSort([1,5,8,3,7,3,0,4,-3,-6]));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义