注册 登录
编程论坛 C++教室

想用递归进行整数大小排序 一直不能排序 帮我看看

honghong88 发布于 2011-11-18 20:31, 885 次点击
#include <iostream>
using namespace std;
int main()

{void swap(int a[10],int n);
    int num[10],i;
    cout <<"input";
for(i=0;i<10;i++)
cin>>num[i];

swap (num,9);


}



void swap (int a[10],int n)
{int j=0,k,i;



if( a[j]>a[j+1] )
{ k=a[j+1];
a[j+1]=a[j];
a[j]=k;

 j++;
 if(j<n)   
swap(a ,n );

for(i=0;i<10;i++)
{cout<<a[i];
cout<<endl;
}

}

}


红的这1段应该是实现 把数组中 最大 的一个 放到最后一个 但是 但是没实现不知道为什么呢
7 回复
#2
我菜1192011-11-18 20:56
就你写得这个垃圾程序看都不爱看!
#3
rcy123456782011-11-18 22:45
回复 2楼 我菜119
你写个好的来看哈也!拽啥子拽。
#4
yukeyyo2011-11-18 23:04
#include <iostream>
using namespace std;
int main()

{
    void swap(int a[10],int n);
    int num[10],i;
    cout <<"input";
for(i=0;i<10;i++)
cin>>num[i];

swap (num,10);
return 0;

}



void swap (int a[10],int n)
{int j,k,i;


for(j=0;j<n;j++)
for(i=n-1;i>j;i--)
{
if( a[i]<a[i-1] )
{ k=a[i-1];
a[i-1]=a[i];
a[i]=k;
}

}

for(i=0;i<10;i++)
{cout<<a[i]<<"\t";

}
cout<<endl;


}
说实话你写的程序确实不是很好,我只在你编的基础上改的,良好的编程习惯还是要养成的
#5
honghong882011-11-19 19:45
回复 4楼 yukeyyo
哈哈 我在调试用递归的方法写呢  
你看我的方法
#include <iostream>
using namespace std;
#define NULL 0     
   
                    
int main()
{void swap(int a[10],int n );
    int a[10],i;
for(i=0;i<10;i++)
{cout<<"请出入整数"<<i+1<<" ";
cin>>a[i];}

swap(a,9 );
for(i=0;i<10;i++)
cout<<"排好序的数为";
cout<<a[i]<<" ";
}


void swap(int a[10],int n )
{int i,k;

for(i=0;i<n; i++ )
{if(a[i]>a[n] )
 {k=a[n];
a[n]=a[i];
a[i]=k;
 }
}
n--;
if(n>1)
swap(a,n );



}


#6
yukeyyo2011-11-19 22:14
回复 5楼 honghong88
你是不是没运行过?
把错误都弄好了再叫别个看你的程序好不好

[ 本帖最后由 yukeyyo 于 2011-11-20 20:52 编辑 ]
#7
jj74125302011-11-22 00:30
递归就要让n有所变化才有可能退出递归....
#8
lqsh2011-11-22 18:18
程序代码:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int MAX=10;
class Qsort
{
private:
    int a[MAX];
    int size;
public:
    Qsort():size(0)
    {
        memset(a,0,sizeof(a));
    }
    Qsort(int n)
    {
        size=n;
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
        }
    }
    int partion(int low,int hight);
    void qsortarray(int low,int hight);
    void print();
};
void Qsort:: print()
{
    for(int i=0;i<size;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
}
int Qsort:: partion(int low,int hight)
{
  int perkey=a[low];
  while(low<hight)
  {
      while(low<hight&&perkey<=a[hight])
      {
          hight--;
      }
      a[low]=a[hight];
      while(low<hight&&perkey>=a[low])
      {
          low++;
      }
      a[hight]=a[low];
  }
  a[low]=perkey;
  return low;
}
void Qsort:: qsortarray(int low,int hight)
{
    if(low<hight)
    {
        int porsition=partion(low,hight);
        qsortarray(low,porsition-1);
        qsortarray(porsition+1,hight);
    }
}
int main()
{

    int n;
    cin>>n;
    Qsort q(4);
    q.qsortarray(0,n-1);
    q.print();
    return 0;

}

快速排序是对冒泡排序的一种改进。运用递归思想,不知道是不是符合你的要求
1