排序-sort指针例子.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include <stdio.h>
  2. #include <stdlib.h> // 为了使用 qsort 函数
  3. #include <math.h> // 为了使用 fabs 函数
  4. // 比较函数:按照绝对值从大到小排序
  5. int compare(const void *a, const void *b) {
  6. float abs_a = fabs(*(const float *)a);
  7. float abs_b = fabs(*(const float *)b);
  8. if (abs_a < abs_b) return 1; // 注意这里是从大到小排序
  9. if (abs_a > abs_b) return -1;
  10. return 0;
  11. }
  12. int main() {
  13. float *nums;
  14. int n = 10; // 输入的数目为 10
  15. // 动态分配内存来存储输入的浮点数
  16. nums = (float *)malloc(n * sizeof(float));
  17. if (nums == NULL) {
  18. fprintf(stderr, "Memory allocation failed.\n");
  19. return 1;
  20. }
  21. // 输入10个浮点数
  22. int i;
  23. for (i = 0; i < n; ++i) {
  24. scanf("%f", &nums[i]);
  25. }
  26. // 使用 qsort 函数对数组进行排序,使用绝对值从大到小排序
  27. qsort(nums, n, sizeof(float), compare);
  28. // 输出排序后的结果,每个数保留小数点后两位有效数字
  29. for (i = 0; i < n; ++i) {
  30. printf("%.2f", nums[i]);
  31. if (i < n - 1) {
  32. printf(",");
  33. }
  34. }
  35. printf("\n");
  36. // 释放动态分配的内存
  37. free(nums);
  38. return 0;
  39. }