24.试定义类ARRAY,将一维整型数组中各元素排序,排序的方法是:根据去掉最高位数字后余下的数值按从小到大的顺序对原数据排序,最后显示排序后的原数据。例如,数组{2035,134,4029},去掉最高位后得到数组{35,34,29},按以上的排序方法最终得到的结果为{4029,134,2035}。
具体要求如下:
- 私有数据成员。
- int *a;待排序的数组。
- int n;成员数组a实际元素个数。
- 公有成员函数
- ARRAY(int t[],int n1);构造函数,初始化数据成员。
- int num(int n);返回去掉参数n最高位后得到的数值。
- void fun();根据题意对成员数组a 排序。算法提示:采用选择排序法,在执行的每一步,将两个数去掉最高位后进行比较,比较结果决定是否需要对两数进行交换。
- void print();按输出示例格式输出成员数组 a 的所有元素。
- 在主函数中对该类进行测试。
int a[] = {134, 445, 2035,111,4029};
输出示例:
原数组:134 445 2035 111 4029
处理后的数组:111 4029 134 2035 445
#include <iostream>
#include <cstring>
using namespace std;
class ARRAY
{
int *a, n;
public:
ARRAY(int t[],int n1){
n=n1;
a=new int[n];
for(int i=0;i<n;i++)a[i]=t[i];
}
int num(int n){
int a=n,count=1;
while(a/10){
a/=10;
count*=10;
}
return n%count;
}
/* 我第一次是这么写的,好蠢
int num(int n)
{
int t[10], len = 0;
while (n != 0){
t[len] = n % 10;
len++;
n /= 10;
}
for (int i = 0; i < len / 2; i++){
int temp = t[len - i - 1];
t[len - i - 1] = t[i];
t[i] = temp;
}
int k = 1;
while (t[k] == 0){
k++;
}
int x = 0;
for (int i = k; i < len; i++){
x = x * 10 + t[i];
}
return x;
}
*/
void fun(){
for(int i=0;i<n-1;i++){
int index=i;
for(int j=i+1;j<n;j++){
if(num(a[j])<num(a[index])){
index=j;
}
}
int t=a[index];
a[index]=a[i];
a[i]=t;
}
}
void print(){
for(int i=0;i<n;i++)cout<<a[i]<<' ';
cout<<endl;
}
};
int main()
{
int t[] = {134, 445, 2035,111,4029};
ARRAY arr(t, 5);
arr.print();
arr.fun();
arr.print();
return 0;
}