第1个回答 2023-02-27
以下是一个实现N个整数的升序排序的C语言程序,使用指针数组实现:
#include <stdio.h>
void Swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int MinPos(int *arr, int start, int end) {
int minPos = start;
for (int i = start + 1; i < end; i++) {
if (arr[i] < arr[minPos]) {
minPos = i;
}
}
return minPos;
}
void Sort(int *arr, int n) {
int *p[n];
for (int i = 0; i < n; i++) {
p[i] = &arr[i];
}
for (int i = 0; i < n; i++) {
int minPos = MinPos(arr, i, n);
Swap(p[i], p[minPos]);
}
}
int main() {
int n;
printf("Enter the number of elements: ");
scanf("%d", &n);
int arr[n];
printf("Enter the elements: ");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
Sort(arr, n);
printf("Sorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
该程序使用指针数组p存储原始数据arr中每个元素的地址,然后按照指针数组元素下标递增顺序访问原始数据,使用MinPos函数查找指向最小值的指针元素下标,使用Swap函数交换指针元素,实现排序。
需要注意的是,程序中使用了可变长度的数组,这要求编译器支持C99标准。