以递归方法实现选择排序(从小到大),为便于检查,要求输出每一次操作后的数组元素的排列状况


 台创软启动荣军波是个程序菜鸟,调试通了以下程序。公布出来,欢迎拍砖!

 
选择排序  (1 满分)
题目描述
以递归方法实现选择排序(从小到大),为便于检查,要求输出每一次操作后的数组元素的排列状况。
 
输入格式
两行输入,第一行表示数组元素个数,第二行表示数组元素,每个数之间以空格隔开
 
输出格式
每一行为一次操作后的输出
#include <iostream>
using namespace std;
 
int num=0;// 这个全局变量必须在main之外独立设置
int *raght=new int[num];//开始把这个动态数组定义在函数内,一递归恢复初值保存不了中间变量
                        //在外面定义right后,经常报故障 error:reference to'right' is ambiguous翻译为
                        //莫宁两可,一时摸不着头脑。后百度知道程序库里面有相同的名称,改为‘raght'一切OK! 
 
void quicksort(int *array,int len)
   int *left=new int[len];
   int left_idx=0,right_idx=0;
   int max=0,add=0;
   
   if(len==0) return; //必须为1个最后要减掉1就是0才一个不漏,不多不少递归成功。 
     
   for(int i=0;i<len;i++)
     if(array[i]>max)
      { max=array[i];
         add=i;
       };
      
    //cout<<max; //作为测试每次递归的中间过程是否正确 
    //cout<<endl;
    
    for(int i=0;i<add;i++)
       left[left_idx++]=array[i];
    for(int i=add;i<len;i++)
       left[left_idx++]=array[i+1];
   // for(int i=0;i<left_idx-1;i++)  //这句话是测试中间过程用的 ,必须从这里开始屏蔽,否则输出错误 
   //  cout<<left[i]<<' ';
     //cout<<endl;
      
      num++;//这个全局变量必须在main之外独立设置 
      
      
      for(int i=num;i>0;i--)
        raght[i]=raght[i-1];//先从最大的开始移动,最后移动一格 
        
         raght[0]=max;
       
      for(int i=0;i<num;i++)
         cout<<raght[i]<<' ';
         cout<<endl;
    quicksort(left,left_idx-1);
      
     delete[] left;
    // delete[] right;
     
    
   return;
 
int main()
{
  int len;
  cin>>len;
  int *array=new int[len];
  for(int i=0;i<len;i++)
    { cin>>array[i];
    }
  quicksort(array,len);
  return 0;
}
免费试用交大台创软启动啦!
 
扫描二维码,关注荣军波---交大台创软启动的最新电力电子产品研发动态