当前位置: 代码迷 >> C语言 >> [求助]快速排序出错在什么地方了?
  详细解决方案

[求助]快速排序出错在什么地方了?

热度:336   发布时间:2007-10-16 20:18:08.0
[求助]快速排序出错在什么地方了?

快速排序出错在什么地方了,为什么得不到正确结果?
#include "stdafx.h"
#include <stdio.h>

int patition(int a[],int low, int high)
{
int pointkey;
pointkey=a[low];
while(low<high)
{
while((low<high)&&(a[high]>=pointkey)) --high;
a[low]=a[high];
while((low<high)&&(a[high]<=pointkey)) ++low;
a[high]=a[low];
}
a[low]=pointkey;
return low;
}

void qsort(int *a, int low, int high)
{
int k;
if(low<high)
{
k=patition(a,low,high);
qsort(a,low,k);
qsort(a,k+1,high);
}
}

void quicksort(int a[], int n)
{
qsort(a,0,n-1);
}


int main()
{
int a[10]={11,16,8,9,7,14,13,15,10,12};
int j;

quicksort(a,10);
for(j=0;j<10;j++)
printf("%d\t",a[j]);
return 1;

}

搜索更多相关的解决方案: 快速  include  return  

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

没有人帮忙看看嘛?


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

哈,才看到~~
我们机房马上关门了
帮你顶一下


----------------解决方案--------------------------------------------------------
{
while((low<high)&&(a[high]>=pointkey)) --high;
a[low]=a[high];
while((low<high)&&(a[high]<=pointkey)) ++low;
a[high]=a[low];
}
不是很看得懂你的算法,把你的思想说来听听啊。。。




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

int patition(int a[],int low, int high)
{
int pointkey;
pointkey=a[low];//记录点
while(low<high)
{
while((low<high)&&(a[high]>=pointkey)) --high;
a[low]=a[high];//从后向前查找一个比pointkey小的数,将其与放到当前记录点的位置
while((low<high)&&(a[high]<=pointkey)) ++low;
a[high]=a[low];//从前向后查找一个比pointkey小的数,将其与放到当前记录点的位置

}
a[low]=pointkey;//
return low;//返回记录点的当前位置,
}


----------------解决方案--------------------------------------------------------
请指点,我不知道问题在什么地方
----------------解决方案--------------------------------------------------------

int patition(int a[],int low, int high)
{
int pointkey;
pointkey=a[low];//记录点
while(low<high)
{
while((low<high)&&(a[high]>=pointkey)) --high;
a[low]=a[high];//从后向前查找一个比pointkey小的数,将其与放到当前记录点的位置
while((low<high)&&(a[high]<=pointkey)) ++low;
a[high]=a[low];//从前向后查找一个比pointkey小的数,将其与放到当前记录点的位置

}
a[low]=pointkey;//
return low;//返回记录点的当前位置,
}



把红色的地方改成low






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

顶一下!


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