近似排序
作者:互联网
注意题目中数据范围,考虑数组存放和比较值为什么,三种简单排序都可以尝试
方法一:普通冒泡排序
#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