排序算法
各类排序算法及比较
选择排序:
每次选择还未排序的值中最小的一个
思路很清晰
伪代码:
1 | // 要排序的数组: data[n] |
代码:
1 | int i,j,min,pos,t; |
冒泡排序
枚举相邻的两个
经过每一轮比较
思路简单
伪代码:
1 | // 要排序的数组: data[n] |
代码1:
1 | int i,j,t; |
代码2:
1 | int sorted = 0; |
借助标志位
每次选择还未排序的值中最小的一个
思路很清晰
1 | // 要排序的数组: data[n] |
1 | int i,j,min,pos,t; |
枚举相邻的两个
经过每一轮比较
思路简单
1 | // 要排序的数组: data[n] |
1 | int i,j,t; |
1 | int sorted = 0; |
借助标志位
正确的代码格式能够让你一眼就看清楚代码的架构正确的代码格式会让别人更愿意回答你的问题
那么
大括号的风格有两种
1 | // 换行 |
个人更习惯后者
在一般的Tab
键shitf-Tab
即可去掉一个缩进
同时
修改方式工具(Tools)-编译器选项(Compiler Options)
"标签"(tab)
选项卡中的"使用tab字符"
去掉tab位置(Tab size)
修改为
其他
在< > = != == ^ * + - &&
等运算符的左右
加上空格
1 | if(a < 1){ |
在每一个逗号的后面添加一个空格
1 | printf("%d%d%d%d", a, b, c, d); |
在
1 | for(int i = 1; i < 0; ++i){ // PS: 在某些环境下, for循环中使用++i比i++快一丢丢 |
在! &
等一元运算符
1 | scanf("%d%d%d", &a, &b, &c); |
有意义的变量名字能够让阅读你代码的人立刻理解变量的意义是什么
变量命名并没有清晰的规范
循环变量命名i j k
和总量大小有关的变量命名m n
数组的命名data[MAXN][MAXN] array[MAXN][MAXN]
标志的命名flag
如
1 | int isPrime(int n){ |
字符串命名str1 str2
用英文单词命名scores[MAXN] students[MAXN]
如果名字中要有多个英文单词
thisIsAVeryLongVariableNameForSomeVeryStupidReason
this_is_a_very_long_variable_name_for_some_very_stupid_reason
两种命名方式均被广泛使用作者印象里
xueshengfenshu[MAXN]
函数命名
英文单词命名
is_prime get_numbers solve
算法名字命名
dfs dfs prim dijkstra
绝对不能用的命名mian
如题
不严谨的统计显示
那么问题来了抢答
打
LOG 能帮我们: 对程序运行情况的记录和监控;
了解程序的运行状态
总而言之
这点很显然废话 需要注意的是
举个例子
1 | long a; |
他输入了printf("%d",a==-1);
a!=-1
之后
看到上面的例子后
说时迟
1 | long a; |
当他按下了神圣的F11
键之后
这点可能课内还没有学到
对于一个递归函数
1 | void hanoi(int n, char from, char via, char to) { |
把室友扥
没有室友
首先绝对不是忙于抢新题库的一血
那么
1 | 本关任务:计算正整数num的各位上的数字之积。 |
1 | 一个数num |
1 | 运算结果(一个整数) |
循环
1 | ans = 1 |
这种思路的核心在于
循环
1 | ans = 1 |
这个思路的核心在于
相比第一个思路的好处是 省略了一个中间变量
今天是
不知道能为各位做点什么
给各位画幅画吧
1 |
|
一副海上明月图送给大家
公众号新开了个栏目
那么问题来了
鸽子表情包
1 | 找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。 |
1 | 第一行有两个数m和n,下面有m行,每行有n个数。 |
1 | Array[i][j]=x |
这道题的思路还是比较清晰的
1 | 输入m,n |
在找数组的最小值的时候有两种实现方式
1 | int min = 0x70000000; |
与
1 | int min = data[0]; |
第一种方式将
这两种方式都是正确的