插排,神奇的插入排序
是神奇的一天,学会了插入排序,大致的精髓就是比较,从第二个开始把他插入到前面有序数组里,判断它插入的位置如果较小,需要将大数挪位置,给他腾个位置。虽然很抽象,代码也抽象,但是如果模拟一遍就会感觉很神奇
for(int i = 1;i < 10;i ++){
int key = a[i];
int j = i - 1;
while(j >= 0&&a[j] > key){//j不越界,且无序的数小于前面的数,进入循环
a[j+1] = a[j];j--;//将前面一个数赋值给后面一个数,这样就会重复,同时标记下位置j,然后j--,继续判断再前一个数是否大于该无序数,重复前面操作,知道j= -1,或者无序数大于前一个数。其实这就是转移,挪位置。
}
a[j+1] = key;//这就是将无序插入其中。然后继续插下一个
}
大致这样。
大致了解了一下fgets,与之前gets不同,用gets(不能检查预留存储区是否能够容纳实际输入的数据)输入获得的是不含换行符的字符串,将换行符转成了\0,当作字符串的结束,当用puts输出时又将\0转成换行符输出如下
而fgets函数有点复杂,但很安全。
模板fgets(数组名,数组数-1,指针(stdin));-1是给\n留个位置
关于指针的咱也不太会,以后再改
这就是输入的字符串含\n的一个证据。