我好像发现了排序的新方法......
  • 板块学术版
  • 楼主pbcoding
  • 当前回复25
  • 已保存回复26
  • 发布时间2024/10/7 18:11
  • 上次更新2024/10/7 20:30:58
查看原帖
我好像发现了排序的新方法......
1210725
pbcoding楼主2024/10/7 18:11

我好像发现了排序的新方法......

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;

int k;

int L(int x){  //求x的长度
	int cnt=0;
	while(x){
		x /= 10;
		cnt++;
	}
	return cnt;
}

int G2(int p){  //求出p个1(如p=5, 则返回11111)
	int ans=0;
	while(p--){
		ans = ans*10+1;
	}
	return ans;
}

int N(int x, int i, int l){  //求x的从左往右数第i位上的数字
	return x/pow(10, l-i-1)%10;
}

int Funtion1(int n){  //冒泡
	int l=L(n);
	for(int i=0;i<l;i++){
		bool f=1;
		for(int j=1;j<l;j++){
			int a=N(n, j-1, l), b=N(n, j, l);
			if(a<b){
				n += (b-a)*9*pow(l-j-1);
				f = 0;
			}
		}
		if(f){
			break;
		}
	}
	return n;
}

int Funtion2(int n){  //选择
	int l=L(n);
	for(int i=0;i<l;i++){
		int m=-1;
		int idx=0, j;
		for(j=i+1;j<l;j++){
			int a=N(n, j, l);
			if(a>m){
				m = a;
				idx = j;
			}
		}
		if(m>N(n, i, l)) n += abs(N(n, i, l)-N(n, idx, l))*9*G2(idx-i)*pow(l-idx-1);
	}
	return n;
}

int main(){
	cin >> k;  //输入为不含0的数字
	cout << Funtion1(k) << "\n" << Funtion2(k);
	return 0;
}
2024/10/7 18:11
加载中...