问题描述
- c语言 排序题(指针) 指针我学的不是很好,请问我的代码哪里有问题?
-
描述将输入的四个整数按由大到小的顺序输出。
已定义如下swap函数,可实现形参pa和pb所指内存单元的内容交换。请务必使用本函数实现两个变量内容的互换。
void swap( int *pa, int *pb)
{
int t;
t=*pa; *pa=*pb; *pb=t;
}输入
输入包含多组数据,每组输入4个整数,用空格隔开。
输出
根据每组输入,输出排序后的4个整数,由空格隔开。输出占一行。
样例输入
4 3 5 2
样例输出
5 4 3 2
我的代码:
#include
void swap(int *pa,int *pb)
{
int t;
t=*pa;
*pa=*pb;
*pb=t;
}
int main()
{
int ar[4],index,min,i,j,a,b;
while(scanf("%d%d%d%d",&ar[0],&ar[1],&ar[2],&ar[3])!=EOF)
{
for(i=0;i
{
index=i;
min=ar[i];
for(j=i;j
{
if(ar[index]>ar[j])
{
a=ar[index];
b=ar[j];
swap(a,b);//函数的调用
}
}
}
printf("%d %d %d %dn",a[0],a[1],a[2],a[3]);
}
return 0;
}
解决方案
应该写成swap(&ar[index],&ar[j])
指针是交换地址里的值,如果你给出的是ab两个变量那么当然会交换ab.的值,但对于本应该交换的ar数组没有任何关系。
话说代码里两个for都不完整,没看出来思路,但这个是肯定错了。
解决方案二:
给你改了个简单的,你那个有好几处错误,要睡觉了,不懂再联系我吧!
#include<stdio.h>
void swap(int *pa,int *pb)
{
int t;
t = *pa;
*pa = *pb;
*pb = t;
}
int main()
{
int ar[4],i,j;
scanf("%d%d%d%d", &ar[0], &ar[1], &ar[2], &ar[3]);
for(i=0;i<4;i++)
{
for (j = i+1;j<4;j++)
{
if (ar[i]<ar[j])
{
swap(&ar[i],&ar[j]);//函数的调用
}
}
}
printf("%d %d %d %dn", ar[0], ar[1], ar[2], ar[3]);
return 0;
}
解决方案三:
这是冒泡排序法吧。。。。。。
解决方案四:
给你写个快速排序:(致谢算法,具体调用略)
#if 1
#include
using namespace std;
void Qsort(int a[], int low, int high)
{
if (low >= high)
{
return;
}
int first = low;
int last = high;
int key = a[first];/*用字表的第一个记录作为枢轴*/
while (first < last)
{
while (first < last && a[last] >= key)
{
--last;
}
a[first] = a[last];/*将比第一个小的移到低端*/
while (first < last && a[first] <= key)
{
++first;
}
a[last] = a[first];
/*将比第一个大的移到高端*/
}
a[first] = key;/*枢轴记录到位*/
Qsort(a, low, first - 1);
Qsort(a, first + 1, high);
}
#endif