求C语言编程大神解答一下下面这个编程代码?

在不改变原始数据的情况下利用指针数组实现N个整数的升序排序,如下图所示:按指针数组元素下标递增顺序访问原始数据时得到升序排序结果。

要求:
(1)编写排序函数Sort,其中查找指向最小值的指针元素下标部分写成函数MinPos,指针交换部分写成函数Swap
(2)主函数定义一维数组和指针数组,并从键盘输入原始数据

以下是实现要求的代码:
#include <iostream>
using namespace std;
void Swap(int* &a, int* &b) {
int* temp = a;
a = b;
b = temp;
}
int MinPos(int* a[], int start, int end) {
int minPos = start;
for (int i = start + 1; i <= end; i++) {
if (*a[i] < *a[minPos]) {
minPos = i;
}
}
return minPos;
}
void Sort(int* a[], int n) {
for (int i = 0; i < n - 1; i++) {
int minPos = MinPos(a, i, n - 1);
if (minPos != i) {
Swap(a[i], a[minPos]);
}
}
}
int main() {
int n;
cout << "请输入整数个数:";
cin >> n;
int* arr = new int[n];
int** pArr = new int*[n];
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "个整数:";
cin >> arr[i];
pArr[i] = &arr[i];
}
Sort(pArr, n);
cout << "排序结果为:";
for (int i = 0; i < n; i++) {
cout << *pArr[i] << " ";
}
cout << endl;
delete[] arr;
delete[] pArr;
return 0;
}
在上述代码中,Sort 函数实现了指针数组的升序排序,MinPos 函数用于查找指向最小值的指针元素下标,Swap 函数用于交换指针。主函数中,首先从键盘输入原始数据,然后将每个整数的地址存储到指针数组中,最后调用 Sort 函数进行排序,并输出排序结果。
温馨提示:答案为网友推荐,仅供参考
第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标准。
相似回答