以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 编程心得 』   (http://bbs.xml.org.cn/list.asp?boardid=42)
----  为什么不能排序???  (http://bbs.xml.org.cn/dispbbs.asp?boardid=42&rootid=&id=60241)


--  作者:chenxiao0594
--  发布时间:3/21/2008 1:21:00 PM

--  为什么不能排序???
#include<iostream.h>
#include<stdlib.h>
int swap(long &x,long &y)
{
 long temp;
 temp=x;
 x=y;
 y=temp;
 return 0;
}
int partition(long v[],long left,long right)
{
 long i=left,j=right+1;
 do{
  do j--;while (v[j]>v[left]);
  do i++;while (v[i]<v[left]);
  if(i<j)  swap(v[i],v[j]);
 }while(i<j);
 if(i<j)  swap(v[left],v[j]);
 return j;
}
long qsort(long v[],long left,long right)
{
 long q;
 if(left<right)
 {
  q=partition(v,left,right);
  qsort(v,left,q-1);
  qsort(v,q+1,right);
 }
 return 0;
}
void main()
{
 const long N=10;
 long a[N];
 for(int i=0;i<N;i++)
  a[i]=rand();
    qsort(a,0,10);
 for(i=0;i<N;i++)
 {
  cout<<a[i]<<"   ";
  
 }

}


--  作者:iaiyanghua1
--  发布时间:4/11/2008 9:27:00 PM

--  
qsort(a,i,10);
  随便看了 下 ,应该改这 ,,你 再试了 ,,没时间 仔细看,有时间帮你调试下
--  作者:Lear
--  发布时间:4/16/2008 9:43:00 PM

--  


int partition(long v[],long left,long right)
{
long i=left,j=right+1;
do{
  do j--;while (v[j]>v[left]);

  do i++;while (    (i<n-1)     &&(v[i]<v[left]));     /防止超界
  
if(i<j)  swap(v[i],v[j]);
}while(i<j);

if(i<j)    /删去,否则不能执行下面一句。上面执行完以后i>=j

swap(v[left],v[i]);/是v[i]而不是v[j]

return j;

}


qsort(a,0,9);/是9不是10


我没有调试,可能还有错



--  作者:Lear
--  发布时间:4/16/2008 10:13:00 PM

--  
不好意思,调试了一下,(swap(v[left],v[i]);/是v[i]而不是v[j]    )我是错的 不好意思,是v[j]
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
50.781ms