注册 登录
编程论坛 数据结构与算法

求助,大家帮忙看看我的快速排序为什么不能输出

随云 发布于 2007-12-07 19:52, 936 次点击
#include "stdio.h"
int R[100];
int partition(int i,int h)
{   i=1;
 int j, x;
 j=h;
 R[0]=R[i];
 x=R[i];
 while (i<j)
 {
  while (i<j && R[j]>=x)
   j--;
   R[i]=R[j];
 
  while(i<j && R[i]<=x)
   i++;
  R[j]=R[i];
 
 }
 R[i]=R[0];
 return i;
}
void QuickSort(int s,int t){
 int k;
 if (s<t) {
  k=partition(s,t);
  QuickSort(s,k-1);
  QuickSort(k+1,t);
 }
}
void main()
{ int i,n;
  printf("输入要排列的总个数:");
  scanf("%d",&n);
 printf("\n输入要排列的数据:");
  for (i=1;i<=n;i++) {
   scanf("%d",&R[i]);
  }
  QuickSort(1,n);
  printf("\n输出从小到大排序为:\n");
  for (i=1;i<=n;i++)
   printf("%5d",R);
}
4 回复
#2
missiyou2007-12-07 21:35
没有数组形参,看看C语言的变量作用域。
#3
missiyou2007-12-07 21:42
#include "stdio.h"
int R[100];
int partition(int i,int h)//int partion(int R[],int i,int h)
{   i=1;
int j, x;
j=h;//定义感觉是这样,int i,j,x; i=i;j=h;
R[0]=R[i];
x=R[i];
while (i<j)
{
  while (i<j && R[j]>=x) //这是大的元素向后移,所以有可能是从大到小排序
   j--;
   R[i]=R[j];

  while(i<j && R[i]<=x)
   i++;
  R[j]=R[i];

}
R[i]=R[0];
return i;
}
void QuickSort(int s,int t){
int k;
if (s<t) {
  k=partition(s,t);
  QuickSort(s,k-1);
  QuickSort(k+1,t);
}
}
void main()
{ int i,n;
  printf("输入要排列的总个数:");
  scanf("%d",&n);
printf("\n输入要排列的数据:");
  for (i=1;i<=n;i++) {
   scanf("%d",&R[i]);
  }
  QuickSort(1,n);
  printf("\n输出从小到大排序为:\n");
  for (i=1;i<=n;i++)
   printf("%5d",R);//这里printf("%d",R[i]);
}
#4
随云2007-12-08 10:42
好了,谢谢
#5
h23637522802012-12-24 14:51
求写好的代码,怎么一运行多一点就不行了,
1