帮我写2.有数组arr[10] = {36,1,26,40,32,23,98,77,2,25},写一个bubbleSort函数,通过一个指针数组aptr[10]对arr进行排序。要求不能改变arr数组顺序,最后把arr和aptr的所有元素输出并对比(指针数组)
时间: 2024-05-01 07:21:06 浏览: 63
冒泡排序(BubbleSort)
好的,这里是bubbleSort函数的实现:
```c++
void bubbleSort(int* arr, int** aptr, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (aptr[j] > aptr[j + 1]) {
// 交换指针
int* temp = aptr[j];
aptr[j] = aptr[j + 1];
aptr[j + 1] = temp;
}
}
}
}
```
这个函数接受一个指向arr数组的指针,一个指向指针数组aptr的指针以及数组的大小n。指针数组aptr中存储的是arr数组中每个元素的地址。
函数使用冒泡排序算法对指针数组进行排序,排序的依据是指向的元素的值。由于只交换了指针,所以arr数组的顺序并没有被改变。
下面是完整的程序:
```c++
#include <iostream>
using namespace std;
void bubbleSort(int* arr, int** aptr, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (*aptr[j] > *aptr[j + 1]) {
// 交换指针
int* temp = aptr[j];
aptr[j] = aptr[j + 1];
aptr[j + 1] = temp;
}
}
}
}
int main() {
int arr[10] = {36, 1, 26, 40, 32, 23, 98, 77, 2, 25};
int* aptr[10];
// 初始化指针数组
for (int i = 0; i < 10; i++) {
aptr[i] = &arr[i];
}
bubbleSort(arr, aptr, 10);
// 输出排序后的arr和aptr
for (int i = 0; i < 10; i++) {
cout << arr[i] << " ";
}
cout << endl;
for (int i = 0; i < 10; i++) {
cout << *aptr[i] << " ";
}
cout << endl;
return 0;
}
```
输出结果为:
```
36 1 26 40 32 23 98 77 2 25
1 2 23 25 26 32 36 40 77 98
```
可以看到,虽然arr数组的顺序没有改变,但aptr数组中存储的指针的顺序已经按照元素大小排好了。
阅读全文