for (i = 第0个元素; 次末元素; 到下一个元素)
{
for (j = 第i+1个元素; 末元素; 到下一个元素)
{
if (compare(元素[j], 元素[i]))
// 比较两个元素的大小关系,大返回真,比大可以,比小也可以
{
swap(交换元素[j]和元素[i])
}
}
}
compare()和swap()针对不同的数据类型写不同的代码。
前面那段,是基本的手法,但要变化的,是那两个函数,必须随着实际情形不同而不同的。
写程序,把前面那个基本的逻辑写出来,再把细化的代码封闭在另外的函数中,这样代码就清晰了,修改也容易,如果数据和比较逻辑变了,修改那两个函数即可,基本的逻辑流程是不用变的。像很多人那样,把全部东西混杂在一起,叫学C语言、面向过程编程,那是搞笑。
对字符串数组,C标准库已经给我们写好了现成的compare()函数,那就是strcmp()函数,是把两个数组作为整体比较大小的,不用再分解。这个时候,元素[i]和元素[j]都是一个字符串数组指针——具体如何交换整个内存块,是有技巧的,逻辑看起来是那样,真实做可以是另外一回事。但无论怎么改,都不会影响前面的程序逻辑,这就是函数封装的好处。这种函数的编程思想,没有一本号称某语言专家编程的书有教你的,它们只讲语法,不讲编程。
[
本帖最后由 TonyDeng 于 2013-1-1 23:08 编辑 ]