数列中n个整数排序

来源:互联网 发布:剑侠情缘网络经典版 编辑:程序博客网 时间:2024/06/10 01:18

题目:

数列中n个整数排序

Problem Description

设计一个包含size个数的数列,要求能够把从指定位置x开始的y个数排列成降序,并输出新的完整的数列。可将数列存放在一维数组中。
例如,原来列有10个数,值为{1,8,3,0,5,9,7,6,9,8},若要求把从第4个数开始的5个数排成降序,
则得到的新数列为{1,8,3,9,7,6,5,0,9,8}。试建立一个类LIST,来完成上述功能。


class LIST
{
public:
LIST(int a[],int len); //构造函数,用len初始化size,根据size动态分配数组存储空间,arr指向该存储空间
void sortpart(int m,int n); //将数列从第m个元素开始的n个数排成降序
void output(); //输出整个数列
~LIST(); //析构函数,释放arr指向的存储空间
private:
int size; //数列元素的个数
int *arr; //数列数组的起始指针
};

Input

输入数据有多组,每组:
第1行输入整型数列的个数n;
第2行输入整型数列各个元素的值;
第3行输入x和y,表示将超长整型数列从指定位置x开始的y个数排列成降序;

Output

每组输出排序后的结果,占一行。每个元素后带一个空格。

Sample Input

101 4 2 7 3 8 2 8 23 63 5

Sample Output

1 4 8 7 3 2 2 8 23 6 
 
参考代码:

#include <iostream>using namespace std;

class LIST{private: int size;  int *arr;   public: LIST(int a[],int len);  void sortpart(int m,int n);     void output();    ~LIST(); };LIST::LIST(int a[],int len){ size=len; arr=new int [size]; int i; for(i=0;i<size;i++)  arr[i]=a[i];}void LIST::sortpart(int m,int n){ int i,j,t; for(i=0;i<n;i++) {  for(j=m-1;j<m+n-i-2;j++)  {   if(arr[j]<arr[j+1])   {    t=arr[j];    arr[j]=arr[j+1];    arr[j+1]=t;   }  } } }void LIST::output(){ int i; for(i=0;i<size;i++)  cout<<arr[i]<<" "; cout<<endl;}LIST::~LIST(){ delete []arr;}

int main(){ int i,n,*a,x,y; while(cin>>n) {  a=new int [n];  for(i=0;i<n;i++)   cin>>a[i];  LIST w(a,n);  cin>>x>>y;  w.sortpart(x,y);  w.output();  delete []a; } return 0;}

 
 
备注:要特别注意排序时数组的首尾位置……
 
 
 
原创粉丝点击