C语言函数指针:通用排序与升/降序实现

需积分: 0 0 下载量 149 浏览量 更新于2024-08-05 收藏 431KB PDF 举报
第8章的主题是关于C语言程序设计中的指针概念,特别是函数指针在通用排序算法中的典型应用。本章强调了如何在不使用函数指针的情况下实现升序和降序排序,如选择法排序,通过嵌套循环比较数组元素并交换位置。然而,当引入函数指针时,代码的灵活性显著提升。 在不使用函数指针的版本中,有两个独立的排序函数:`AscendingSort`和`DescendingSort`,分别用于升序和降序排列。它们内部都包含一个`compare`逻辑,通过硬编码的条件语句(`if(a[j]<a[k])` 和 `if(a[j]>a[k])`)来决定元素的顺序。 当引入函数指针`int(*compare)(int,int)`时,代码结构发生了变化。`SelectionSort`函数现在接受一个指向比较函数的指针作为参数,这个函数接受两个整数并返回一个布尔值,表示第一个数是否小于第二个数。这样,通过调用不同的比较函数(如`Ascending`和`Descending`),可以实现升序和降序排序,无需为每种排序方式创建单独的函数。例如: ```c void SelectionSort(int a[], int n, int (*compare)(int, int)) { // ... if ((*compare)(a[j], a[k])) k = j; // 使用函数指针进行比较 // ... } // 函数定义 int Ascending(int a, int b) { return a < b; // 返回true表示a小于b,用于升序排序 } int Descending(int a, int b) { return a > b; // 返回true表示a大于b,用于降序排序 } // 调用示例 SelectionSort(score, n, Ascending); // 升序排序 SelectionSort(score, n, Descending); // 降序排序 ``` 通过这种方式,函数指针使得排序逻辑更加模块化,便于复用和扩展,提高了代码的可读性和维护性。