排序——插入排序
程序员文章站
2022-03-21 21:21:43
...
国庆假期没机会出去玩,总感觉闲的不行,打算趁此时机看会算法,也没有打算固定一天看多少,算是打发时间。
欸,果然自己还是不太爱学习哇~
今天介绍的是最最最最最最最…基础的算法,排序中的插入排序,虽然我一直不觉得他是算法,但谁让我今天第一个看到的使它呢?
话说今天也是我第一次认真看伪代码,感觉很奇怪,我看书上说吧,有C,C++, Java, Python基础的看起来一点难度没有。我这个人吧,虽然学的不咋地,但是很不巧,C和Python都略有涉及,Java和C++,也算是知道长个啥样,结果当我看到伪代码还是愣住了。
很奇怪的不是这里,而是我决定用C去写一下试试,对,就奇怪在这!
我居然写出来了!
amazing!
咳咳,接下来我先贴一下伪代码吧:
for i = 2 to A.length
key = A[i]
// Insert A[i] into the sorted sequence A[1...i-1]
j = 1 -1
while j>0 and A[j]>key
A[j+1] = A[j]
j = j-1
A[j+1] = key
不得不说伪代码感觉打起来好累啊,可能是我第一次的原因?
代码不长,原理很简单~
就是双层循环的嵌套,具体的解释和实现,我用以下C语言来写一下:
#include<stdio.h>
int main(){
int a[6];
int i, j, key;
for(i = 0; i < 6; i++){
scanf("%d", &a[i]);
}
/*排序主体*/
for(i = 1; i < 6; i++){ //外围的循环制定需要去插入的数 。
key = a[i]; //将需要去插入的数命名为 key
j = i-1; //向前插入,且由于是从第二个数开始排序,前面的数已经是有序的了。
while(j >= 0 && a[j] > key){ //逐步向前循环插入,即如果插入的数 key 小于该数,则将该数后移一位
a[j+1] = a[j];
j = j-1;
}
a[j+1] = key; //循环结束,说明key前面已经没有小于它的数,则在此地插入 key
}
for(i = 0; i < 6; i ++){
printf("%d ", a[i]);
}
return 0;
}
代码块中,我们定义的数组长度为6,以后你们也可以根据情况来自己定义,不过我觉得以后用到的可能性不大,比较还有那么多好算法呢~
上一篇: 滑动窗口解题技巧