首页 新闻 赞助 找找看

我写的快速排序代码怎么出问题了

0
[已解决问题] 解决于 2010-11-08 15:03

#include<iostream>
using namespace std;
#define SWAP(x,y) {int t; t = x; x = y; y = t;}
int paitition(int *a,int p,int r)
{
int i = p-1;
for(int j = p; j < r-1; ++j)
{
if(a[j] <= a[r])
{
++i;
SWAP(a[i],a[j]);
}
}
SWAP(a[
++i],a[r]);
return i;
}
void quick_sort(int *a,int p,int r)
{
int q = 0;
if(p < r)
{
q
= paitition(a,p,r);
quick_sort(a,p,q
-1);
quick_sort(a,q
+1,r);
}
}
int main()
{
int a[] = {1,3,10,2,5};
quick_sort(a,
0,4);
for(int i = 0; i < 5; ++i)
cout
<< a[i]<< " ";
}

 

谁解释下啊?

hailong的主页 hailong | 初学一级 | 园豆:70
提问于:2010-11-08 09:26
< >
分享
最佳答案
0

paitition函数有问题,a[i]应该代表当前元素,但这里显然不是。

quicksort的paitition函数代码应该如下:

int paitition(int *a,int p,int r)
{
int pivotkey=a[p];
while(p<r)
{
while(p<r && a[r]>=pivotkey)
--r;
a[p]
=a[r];
while(p<r && a[p]<=pivotkey)
++p;
a[r]
=a[p];
}
a[p]
=pivotkey;
return p;
}

 

这个是从小到大排序的。从大到小类似。

wang_yb | 老鸟四级 |园豆:4891 | 2010-11-08 14:27
其他回答(2)
0

#define SWAP(x,y) {int t; t = x; x = y; y = t;}

 

该函数对数组没有影响

 

比如说: a[0]=1, a[1] = 2;

swap(a[0], a[1]) 之后,还是

a[0] = 1, a[1] = 2;

小彬 | 园豆:947 (小虾三级) | 2010-11-08 13:51
0

java版:

private int Partition(int[] array,int i,int j)
{

int pivot =array[i];
while(i <j)
{
while(i <j&&array[j]> =pivot)
j
--;

if(i <j)
array[i
++]=array[j];

while(i <j &&array[i] <=pivot)
i
++;
if(i <j)
array[j
--]=array[i];
}
array[i]
=pivot;
return i;
}
LoujaDy | 园豆:908 (小虾三级) | 2010-11-08 14:41
谢啦啊!
支持(0) 反对(0) hailong | 园豆:70 (初学一级) | 2010-11-08 15:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册