员理管帅最 发表于 2019-8-31 23:04:52

仿小甲鱼程序,有问题,求大神指点


#include<stdio.h>
int pai(int c[],int i,int j)
{
    int a=i,b=j;
   int tem;
while(a<=b)
{
while(c<c[(i+j)/2])
{a++;}
while(c>c[(i+j)/2])
{b--;}
if(a<=b)
{
tem=c;
c=c;
c=tem;
a++;
b--;
}
}
if(i<b)
{
   pai( c,i,b);
}
if(a<j)
{
   pai(c,a,j);
//pai(c,b,a);加了这个重新再排就正常了,自己感觉改的很差。
}
   }



int main()
{
int n,i=0;
int j;
int c[]={1,0,4,6,3,9,10,8,5,7,2};
n=sizeof(c)/sizeof(int);
pai(c, i,n-1);
for( j=0;j<n;j++)
{
printf("%d ",c);
}
return 0;

}
/*
    1,0,4,6,3,9,10,8,5,7,2
         |
1 0 4 6 3 2 10 8 5 7 9
            |
1 0 4 6 3 2    10 8 5 7 9//仿小甲鱼的程序,不知道哪出了问题,人工排序才发现这一步就出错了,5和6还没排好序就另成各一派递归了,导致结果出错,求大神帮我改进一下,自己改的有点差。
*/

ba21 发表于 2019-9-1 13:18:41

给你提几个建议
1. while 迭代, pai递归 时间复杂度增加
2. 排序都有常用的算法,比如冒泡, 选择排序。。。。 看你用的是哪种。一般简单的迭代下就可以完成。不用搞这么复杂
页: [1]
查看完整版本: 仿小甲鱼程序,有问题,求大神指点