字串排序(小心sort的坑)

2021-09-10 09:02:27 字數 1144 閱讀 9826

定義乙個字串的無序度為所有位置後面的字母比該位置的字母小的總數之和。比如"daabec''這個字串的無序度是5,因為d後面有4個位置比它小(aabc),e後面有1個比它小(c),其它位置後面沒有比自己小的。" aacedgg "的無序度為1(e後面有乙個d比它小)。" zwqm "的無序度為6,每個位置後面所有的字母都比它小。

現在你的任務是給定一些字串(只由大寫字母組成),把他們按照無序度從小到大排序,如果無序度一樣,那麼就按照輸入的相對順序排序。

收起

單組測試資料。

第一行有兩個整數n(0 < n <= 50)和m (0 < m <= 100),分別表示輸入的字串的長度和字串的個數。

接下來m行,每一行包含乙個長度為n的字串,只由大寫字母組成。

輸出m行,表示排序之後的字串。
10 6

aacatgaagg

ttttggccaa

tttggccaaa

gatcagattt

cccgggggga

atcgatgcat

cccgggggga

aacatgaagg

gatcagattt

atcgatgcat

ttttggccaa

tttggccaaa

這道題一開始的想法就是用結構體,結構體內乙個字元陣列加乙個整型,然後用冒泡的思想統計無序度(賦值給整型),最後就是乙個結構體排序了,整個流程下來一氣呵成。思想沒問題,但是用sort排序要小心了,因為他還要求無序度一樣,那麼就按照輸入的相對順序排序。注意這個就哦可了。(sort基於快速排序,是不穩定的排序)

**如下:

#include#include#include#include#include#include #define ll long long

using namespace std;

struct node

;struct rule

for(ll i=0;i(ans[i].c[k])) sum++;}}

ans[i].b=sum;

}sort(ans,ans+m,rule());

for(ll r=0;r}

sort對字串排序

漲知識了 sort只能對c 裡面的string串排序,不能對c裡面的字元陣列排序 fzu2088 就是乙個簡單的字串字典序排序 然後輸出就ok了 主要是說的 sort只能對c 裡面的string串排序,不能對c裡面的字元陣列排序 include include include include usi...

用sort給字串排序

按照字典序排序 c 版 string s 21 for int i 0 i 20 i cin s i sort s,s 20 不用寫cmp函式,string 類提供了operator。但這只是按照字典序排序的,按長度排序如下 按長度排序 c 版 include include include usi...

C 的sort函式實現字串排序

sort函式用於c 中,對給定區間所有元素進行排序。標頭檔案是 include 實現原理 sort並不是簡單的快速排序,它對普通的快速排序進行了優化,此外,它還結合了插入排序和堆排序。系統會根據你的資料形式和資料量自動選擇合適的排序方法,這並不是說它每次排序只選擇一種方法,它是在一次完整排序中不同的...