【发布时间】:2022-02-04 23:52:44
【问题描述】:
我需要使用选择排序算法和指针算法对数组元素进行升序排序。
这意味着以下(使用指针算法):
- 找到未排序数组中的最小元素;
- 将找到的最小元素与第一个元素交换
- 重复直到数组结束
- 打印排序数组
代码:
#include <stdio.h>
void swap(double **pp, double **qq) {
double *temp = *pp;
*pp = *qq;
*qq = temp;
}
void sortArray(double arr[], int n) {
double *q, *min;
q = min = arr;
while (min > arr + n) {
while (q < arr + n) {
if (*q < *min)
min = q;
q++;
}
min++;
swap(&min, &q);
}
}
void writeSorted(double arr[], int n) {
double *qq = arr;
while (qq < arr + n) {
printf("%g ", *qq);
qq++;
}
}
int main() {
double arr[4] = {2.1, 4.23, 3.67, 1.5};
int n = 4;
sortArray(arr, n);
writeSorted(arr, n);
return 0;
}
此代码打印相同的未排序数组。你知道怎么解决吗?
【问题讨论】:
-
您是否尝试过调试您的代码?例如,通过使用 调试器 逐条执行它,同时监控变量及其值?
-
作为提示:交换指向局部变量的指针可能不是您想要做的。
-
找到最小值是正确的,交换和打印是错误的
-
swap(&min, &q)交换min和q(它们都是局部变量),但它不会交换arr中的任何内容。您需要交换数组中的相应值。 -
交换不需要双重间接 - 直接接受指向 double 的普通指针和 double 值(当指针指向数组时,数组将被更改)。
标签: arrays c function pointers