其他分享
首页 > 其他分享> > 近似排序

近似排序

作者:互联网

题目链接:http://oj.tfls.net/p/86

注意题目中数据范围,考虑数组存放和比较值为什么,三种简单排序都可以尝试

方法一:普通冒泡排序

#include<bits/stdc++.h>
using namespace std;
int a[105];
int x, y;
int fz(int n){//实现数字转换 
    int newn=0;
    while(n){
        newn=newn*10+n%10;
        n/=10;
    } 
    return newn;
}
int main()
{
    cin>>x>>y;
    int n=0;//记录下标,统计数组个数 
    for(int i=x; i<=y; i++)a[++n]=i;//数组下标存储从1-n 
    for(int i=1; i<n; i++){//此处使用冒泡排序优化 ,也可以使用选择排序或者插入排序 
        bool f=1;//用于冒泡优化 
        for(int j=1; j<=n-1; j++)
            if(fz(a[j]) > fz(a[j+1])){//注意此处比较的是倒过来的数的大小 
                swap(a[j], a[j+1]);
                f=0;
            }
        if(f)break;    
    }
    for(int i=1; i<=n; i++)cout<<a[i]<<endl;
    return 0;
 } 

方法二:结构体冒泡

#include<bits/stdc++.h>
using namespace std;
int x, y;
struct num{
    int oldn, newn;//结构体数组 
};
num a[105];
int fz(int n){//实现数字转换 
    int newn=0;
    while(n){
        newn=newn*10+n%10;
        n/=10;
    } 
    return newn;
}
int main()
{
    cin>>x>>y;
    int n=0;//记录下标,统计数组个数 
    for(int i=x; i<=y; i++){//数组下标存储从1-n 
        a[++n].oldn=i;
        a[n].newn=fz(i);
    }
    for(int i=1; i<n; i++){//此处使用冒泡排序优化 ,也可以使用选择排序或者插入排序 
        bool f=1;//用于冒泡优化 
        for(int j=1; j<=n-1; j++)
            if(a[j].newn > a[j+1].newn){//注意此处比较的是倒过来的数的大小 
                num t;//结构体变量交换 
                t.newn=a[j].newn;  t.oldn=a[j].oldn;
                a[j].newn=a[j+1].newn;  a[j].oldn=a[j+1].oldn;
                a[j+1].newn=t.newn; a[j+1].oldn=t.oldn;
                f=0;
            }
        if(f)break;    
    }
    for(int i=1; i<=n; i++)cout<<a[i].oldn<<endl;
    return 0;
 } 

 

标签:10,newn,int,fz,近似,num,排序,oldn
来源: https://www.cnblogs.com/tflsnoi/p/16314380.html