问题
1158: 又是排序(指针专题)
时间限制: 1 Sec 内存限制: 128 MB
提交: 7751 解决: 3698
将输入的四个整数按由大到小的顺序输出。
请你定义一个四个数排序的函数psort,psort的四个参数为要排序的四个整数变量的地址,请你按照从大到小的顺序把四个数分别放到四个指针所指向的变量里,不要在函数内输入输出任何内容。请务必使用函数实现四个数的排序。
void psort( int *pa, int *pb,int *pc,int *pd)
{
//实现四个数的排序,并分别放到四个指针所指向的变量里。
}
注意:本题如果采用C/C++提交时,至少要编写psort()函数和main()函数两个函数,并提交完整的程序代码。
输入
输入4个整数,用空格隔开。
输出
输出排序后的4个整数,由空格隔开。输出占一行。
样例输入 Copy
4 3 5 2
样例输出 Copy
5 4 3 2
代码
#include <iostream>
#include <string>
void psort(int* pa, int* pb, int* pc, int* pd);
using namespace std;
int main() {
int a, b, c, d;
cin >> a >> b >> c >> d;
int *pa = &a, *pb = &b, *pc = &c, *pd = &d;
psort(pa, pb, pc, pd);
cout << *pa << " " << *pb << " " << *pc << " " << *pd << endl;
}
void psort(int* pa, int* pb, int* pc, int* pd)
{
//实现四个数的排序,并分别放到四个指针所指向的变量里。
int temp[4] = {*pa, *pb, *pc, *pd};
int n_temp;
for (int i = 0; i < 3; i++) { //简单选择排序
int k = i;
for (int j = i + 1; j < 4; j++) {
if (temp[k] < temp[j]) {
k = j;
}
}
n_temp = temp[i];
temp[i] = temp[k];
temp[k] = n_temp;
}
*pa = temp[0], *pb = temp[1], *pc = temp[2], *pd = temp[3];
// 四个指针的指向重新分配一下(还是原来的 4 个地址)
//
//
// 下面的方法是一厢情愿,不清楚是如何传递的,值传递,引用?
//
//int* temp[4] = { pa, pb, pc, pd };
//for (int i = 0; i < 3; i++) {
// int k = i;
// for (int j = i + 1; j < 4; j++) {
// if (*temp[k] < *temp[j]) {
// k = j;
// }
// }
// int * tempval;
// tempval = temp[i];
// temp[i] = temp[k];
// temp[k] = tempval;
//}
//pa = temp[0]; pb = temp[1]; pc = temp[2]; pd = temp[3];
}
总结
通过形参,把变量值的地址通过指针传进函数,把值暂存起来,排过序后,让指针解引用改变自己地址下的 数值。在这个过程中,指针指向的位置没有改变,但指针所指向的值被修改了。