一,题意:
输入N个字符串,按照字符串的逆序数由最少到最大开始输出。
注意:如果逆序数相同,就原来顺序输出。
二,思路步骤:
1,输入,并用a[]存储每行字符串的逆序数;
2,冒泡排序a[]的同时换掉str[][]的顺序;
3,输出。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include<iostream>
2 #include<cstring>
3 using namespace std;
4 int main(){
5 char str[105][55];
6 int a[105];
7 char ch[105];
8 int n , m ;
9 cin>>m>>n;
10 //输入并算出没行的字符串的逆序数并存储
11 for(int i = 0 ; i < n ; i++){
12 cin>>str[i];
13 int count = 0 ;
14 for(int j = 0 ; j < m ; j++){
15 for(int k = 0 ; k < j ; k++){
16 if(str[i][j]<str[i][k])
17 count++; //记录逆序数
18 }
19 }
20 a[i]=count; //a[]存储每一行的逆序数
21 }
22
23 //将str冒泡重新排序
24 for(int i = 0 ; i < n ; i++){
25 for(int j = 0 ; j < n - i - 1 ; j++){
26 if(a[j]>a[j+1]){
27 int temp = a[j];
28 a[j] = a[j+1];
29 a[j+1] = temp;
30 strcpy(ch,str[j]);
31 strcpy(str[j],str[j+1]);
32 strcpy(str[j+1],ch);
33 }
34 }
35 }
36 //输出
37 for(int i = 0 ; i < n ; i++)
38 cout<<str[i]<<endl;
39 return 0;
40 }
版权声明:本文为博主原创文章,未经博主允许不得转载。