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