排列的非递归实现

       这是在学离散数学时候书上的一个算法,翻出来看看,好像有点吃力,看到以前写的代码,注释这么少,真的较难看懂,就算是自己编的也一样。看来以后写一些程序一定要写注释或文档,先把下面没有注释的代码贴出来,有时间再把注释加上去。

#include <iostream.h>

int n;

int  firmax(int a[]);        //
int  lasmax(int a[],int);
void sort(int a[]);        //排序
void doover(int a[],int );    //顺序反转


int main()
{
    
int i,j;
    
int tmp;
    
int *a;
    
    cout
<<"Please input the number of n = "<<endl;
    cin
>>n;
    a 
= new int[n];
    
for(i = 0;i < n;i++)
        cin
>>a[i];
    i
=0;
    sort(a);
    cout
<<"All of the range: "<<endl;
    
for(i=0;i<n;i++)
        cout
<<a[i]<<" "<<endl;
    
    
while(i!=-1)
    
{
        i 
= firmax(a);
        tmp 
= a[i-1];
        j 
= lasmax(a,i);
        a[i
-1= a[j];
        a[j] 
= tmp;
        doover(a,i);
        
if(i!=-1)   //Output the array
            for(int t = 0;t < n;t++)
                cout
<<a[t]<<" ";
            cout
<<endl;
    }

    
    
return 0;
}


int firmax(int a[])
{
    
int j =- 1;
    
for(int i= 0; i < n-1; i++)
        
if(a[i] < a[i+1])
            j 
= i+1;
        
return j;
}


int lasmax(int a[],int k)

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

        
return j;
}


void sort(int a[])
{
    
int i,j;
    
for(i=0;i<n-1;i++)
    
{
        
for(j = i+1; j < n; j++)
            
if(a[i] >= a[j])
            

                
int tmp = a[i]; 
                    a[i] 
= a[j];
                    a[j] 
= tmp;
            }

    }

}


void doover(int a[],int k)
{
    
int tmp;
    
for(int i = k,j = 1; i < n; i++, j++)
    
{
        
if(i <= n-j)
        
{
            tmp 
= a[i];
                  a[i] 
= a[n-j];
                         a[n
-j] = tmp;
        }

    }

}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值