神啊 指针的问题真是个大问题阿 救救我吧

时间:2008-05-10 20:51:52   来源:论坛整理  作者:  编辑:chinaitzhe
快速排序
调试通过,编译通过,指针那里有段错误。请大家帮我看一下怎样修改阿

#include <iostream>

using namespace std;

int main()
{
int num , i = 0 , j;
int *p;
cin >> num;
j = num - 1;
p = new int [num];
for(i; i < num; i )
{
cin >> p[i];
}
void QuickSort(int p[] , int start , int end);
QuickSort(p , i , j);
return 0;
}
void QuickSort(int p[] , int start , int end)
{
int columella , i , j;
columella = p[0];
i = start;
j = end;
do
{
if(p[j] > columella) //存在严重问题
{
j--;
}
else if(p[j] <= columella)
{
int temp;
temp = columella;
columella = p[j];
p[j] = temp;
i ;
}
if(p[i] < columella)
{
i ;
}
else if(p[i] >= columella)
{
int temp;
temp = columella;
columella = p[i];
p[i] = temp;
j--;
}
}while(i >= j);
QuickSort(p , i , i-1);
QuickSort(p, i 1 , j);
for(i = 0; i <= end ; i )
{
cout < < p[i] < < " ";
}
cout < < endl;
delete p;
}
网友回复:delete p;

delete [] p;

网友回复:你的那个这条语句中使用了new分配了一个数组如下:
p = new int [num];

程序结束后,必须用 如下语句来释放内存空间:

delete[] p;

否则释放的是 p 数组中的第一个数据元素,而后面的 num-1个元素都没有释放!
delete[] p; 才能释放一个数组中的所有元素!



网友回复:你所提的错误我以改了,并知道了为什么要这样改

if(p[j] > columella)

else if(p[j] <= columella)
我在gdb下调试
这两个地方有段错误,不知道怎样解决。
网友回复:你的那个 quicksort 中的i 和j的下标没有作 越界检查! 程序运行的时候i和j都出现了越界!
变成了负数,程序肯定要崩溃嘛!
还有程序得讲究格式!不要不讲格式,本来想跟你该的,我没时间,不好意思..
网友回复:天啊 我的大哥 有点格式咯。能定义成局部变量的就不要在全局中定义。定义指针顺手就初始化。还有我半天没看懂你的意思。。。你要用来做什么的这个程序?
网友回复:int main()
{
int num , i = 0 , j;
int *p;
cin >> num;
j = num - 1;
p = new int [num];
for(i; i < num; i )
{
cin >> p[i];
}
void QuickSort(int p[] , int start , int end);
QuickSort(p , i , j);
return 0;
}

先看看调用QuickSort()的时候,i的值是多少。
网友回复:#include <iostream>

using namespace std;

int main()
{
int num;
cin > > num;
int *p;
p = new int[ num ];
for(int i = 0 ; i < num ; i )
{
cin > > p[i];
}
for( int i = 0; i < num; i )
{
cout < < p[ i ] < < " ";
}
cout < < endl;
void QuickSort(int *p , int low , int high);
QuickSort( p , 0 , num - 1 );
for( int i = 0; i < num; i )
{
cout < < p[ i ] < < " ";
}
cout < < endl;
delete [] p;
return 0;
}

void QuickSort(int *p , int low , int high)
{
int i , j;
i = low;
j = high;
int temp = p[ 0 ];

while( i < j)
{
while(i < j && temp <= p[ j ]) j --;
if(p[ j ] < p[ i ])
{
int temp;
temp = p[ i ];
p[ i ] = p[ j ];
p[ j ] = temp;
i ;
}

while(i < j && p[ i ] < temp)i ;
if(p[ j ] > p[ i ])
{
int temp;
temp = p[ j ];
p[ j ] = p[ i ];
p[ i ] = temp;
j--;
}
}
p[ i ] = temp;

if(low < i) QuickSort(p , low , i - 1);
if(i < high) QuickSort(p , j 1 , high);
}
在看课本重写了一下,没有段错误。但结果不对阿
网友回复:顺便问问一下,我排好版的,一提交就左对齐了
网友回复:不知,帮顶
关键字:神啊,指针,问题,真是,大问题,

相关文章

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面