插入排序的思路

插入排序的思路

老师你看我的sort 与sort2 是不是也是插入排序的思想,如果是,我就有点模糊,就是插入排序的思想到底是重点是在采用插入这个动作,还是说是保证[0,i)是已经排好序的

1
class InsertSort{<br>static sort(arr){<br>// 假设第一个[0,0]已经排序完成<br>for(let i=1; i<arr.length; i++){<br>let curIndex = i;<br>for(let j=i-1; j>=0; j--){<br>if(arr[j]>arr[curIndex]) {<br>this.swap(arr, j, curIndex);<br>curIndex = j;<br>console.log(`第${j}次:`+arr);<br>}<br>}<br>// console.log(`第${i}次:`+arr);<br>}<br>return arr;<br>}<br>static sort2(arr){<br>// 假设第一个[0,0]已经排序完成<br>for(let i=1; i<arr.length; i++){<br>let curIndex = arr[i];<br>for(let j=i-1; j>=0; j--){<br>if(arr[j]>curIndex) {<br>arr[j+1] = arr[j];<br>arr[j] = curIndex;<br>}<br>}<br>console.log(`第${i}次:`+arr);<br>}<br>return arr;<br>}<br><br>static sort3(arr){<br>// 假设第一个[0,0]已经排序完成<br>for(let i=1; i<arr.length; i++){<br>for(let j=i; j-1>=0; j--){<br>if(arr[j]<arr[j-1]) {<br>this.swap(arr, j, j-1);<br>}else{<br>break;<br>}<br>}<br>console.log(`第${i}次:`+arr);<br>}<br>return arr;<br>}<br>static swap(arr, i, j){<br>let temp = arr[i];<br>arr[i] = arr[j];<br>arr[j]=temp;<br>}<br>}<br>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
liuyubobobo 2021-04-05 17:34:13

插入排序的关键是“插入”这个动作。


选择排序和冒泡排序在每轮循环中也是保证 [0,i) 排好序的,但是他们和插入排序是不同的。


继续加油!:)

  • 提问者 else2021 #1

    哦哦,明白了,那老师,我的前两种写法是不是也是正确的

    2021-04-05 17:42:17
  • liuyubobobo 回复 提问者 else2021 #2

    我看了一遍你的逻辑,是正确的。其实你的前两个实现,本质也是插入排序的思路。只不过对与如何实现“插入”这个过程,具体的实现方式和我的实现方式不同而已:)

    2021-04-05 18:18:52
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2603    人
  • 解答问题       1096    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码