欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

排序——插入排序

程序员文章站 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,以后你们也可以根据情况来自己定义,不过我觉得以后用到的可能性不大,比较还有那么多好算法呢~

相关标签: 排序 插入排序