当前位置: 代码迷 >> C语言 >> 指向指针的指针排序
  详细解决方案

指向指针的指针排序

热度:498   发布时间:2006-05-06 18:05:00.0
指向指针的指针排序

原题:
用指向指针的指针的方法对10个整数排序并输入。要求将排序单独写成一个函数。
请问以下两种Sort排序方法有什么区别哪中方法更好一点,请高手指点,多谢啊


主程序:
main()
{
int a[10];
int *num[10];
void Sort();
int i,**p;
p=num;
for(i=0;i<10;i++)
{
num[i]=&a[i];
scanf("%d",&a[i]);
}
Sort(p);
for(i=0;i<10;i++)
printf("%d ",**(p+i));
}

两个函数分别是:
void Sort(int **p)/*1、交换指针的指针排序法*/
{
int i,j,t;
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(**(p+i)>**(p+j))
{
t=**(p+i);
**(p+i)=**(p+j);
**(p+j)=t;
}
}


void Sort(int **p)/*2、交换指针排序法*/
{
int i,j,*t;
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(**(p+i)>**(p+j))
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}

}

[此贴子已经被作者于2006-5-6 18:24:27编辑过]

搜索更多相关的解决方案: 指针  Sort  int  函数  void  

----------------解决方案--------------------------------------------------------
今天人怎么这么少呢
----------------解决方案--------------------------------------------------------
大哥啊,指针和叔祖只是看起来不同,在内存中都是一样的,非要用指针
----------------解决方案--------------------------------------------------------
哈哈 练习啊,用熟了之后就不用了
----------------解决方案--------------------------------------------------------

两个函数分别是:
void Sort(int **p)/*1、交换指针的指针排序法*/
{
int i,j,t;
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(**(p+i)>**(p+j))
{
t=**(p+i);
**(p+i)=**(p+j);
**(p+j)=t;
}
}


for(i=0;i<10;i++)


下标超了


----------------解决方案--------------------------------------------------------
5楼的意思是?
不过执行可以啊
----------------解决方案--------------------------------------------------------
可以运行,但你下标过头了
----------------解决方案--------------------------------------------------------
以下是引用ZZCCY在2006-5-6 18:05:00的发言:

原题:
用指向指针的指针的方法对10个整数排序并输入。要求将排序单独写成一个函数。
请问以下两种Sort排序方法有什么区别哪中方法更好一点,请高手指点,多谢啊


主程序:
main()
{
int a[10];
int *num[10];
void Sort();
int i,**p;
p=num;
for(i=0;i<10;i++)
{
num[i]=&a[i];
scanf("%d",&a[i]);
}
Sort(p);
for(i=0;i<10;i++)
printf("%d ",**(p+i));
}

两个函数分别是:/*这种方法在排序的同时把数组a[]的元素也排序了,你输出整个数组的时候是排序好了的*/
void Sort(int **p)/*1、交换指针的指针排序法*/
{
int i,j,t;
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(**(p+i)>**(p+j))
{
t=**(p+i);
**(p+i)=**(p+j);
**(p+j)=t;
}
}

/*这种方法并未对数组a[]的元素排序,只是对指向数组的指针进行排序,你输出指针数组是排序好了的,但当你直接输出数组时,还是原样子的*/
void Sort(int **p)/*2、交换指针排序法*/
{
int i,j,*t;
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(**(p+i)>**(p+j))
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}

}


至于哪个好,就要看你具体要怎么用了.


----------------解决方案--------------------------------------------------------
以下是引用ZZCCY在2006-5-6 18:05:00的发言:

原题:
用指向指针的指针的方法对10个整数排序并输入。要求将排序单独写成一个函数。
请问以下两种Sort排序方法有什么区别哪中方法更好一点,请高手指点,多谢啊


主程序:
main()
{
int a[10];
int *num[10];
void Sort();
int i,**p;
p=num;
for(i=0;i<10;i++)
{
num[i]=&a[i];
scanf("%d",&a[i]);
}
Sort(p);
for(i=0;i<10;i++)
printf("%d ",a[i] ); /*把**(p+i)换成a[i]后,第二个就不管用了!*/
}

两个函数分别是:
void Sort(int **p)/*1、交换指针的指针排序法*/
{
int i,j,t;
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(**(p+i)>**(p+j))
{
t=**(p+i);
**(p+i)=**(p+j);
**(p+j)=t;
}
}


void Sort(int **p)/*2、交换指针排序法*/
{
int i,j,*t;
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(**(p+i)>**(p+j))
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}

}



----------------解决方案--------------------------------------------------------

这道题我明白了
谢谢各位的顶力帮助尤其是 soft_wind 和 忍者无敌谢谢你们


----------------解决方案--------------------------------------------------------
  相关解决方案