堆排序思路:在篩選sift的過程中,我們不必每乙個結點都要篩選,而是從最後乙個非葉子結點(n/2向上取整)到根結點(1)進行調整生成乙個最大堆。
篩選就是從乙個結點a出發,先比較這個結點a的左右孩子b c,如果有比其大的結點,交換假設結點c大,那麼將a結點的值調整為c結點的值,接著以c為結點,繼續向下比較,逐層遞推下去,最多可能一直調整到樹葉。
篩選的最後一步就是你調整完結點值後,將原結點的值賦給最後一次調換時的子結點,這樣就完成了一次篩選動作。
可以比喻成:過篩子,較小的數就篩下去,而較大的數就一層層地選擇上來
ascii碼的轉換:int 和 char 是可以互相轉換的 ,輸入int型儲存在char型中,輸出的就是int型ascii碼對應的char型,反之亦然
本題思路:將char型字串儲存至int型陣列中,並且進行最小堆排序,最後儲存在char型陣列中輸出。
篩選**方法一:
void
siftdown
(int i)
if(t != i)
else
flag =1;
}return
;}
本題**(篩選**方法二):
#include
using
namespace std;
const
int maxsize =
100;
typedef
int datatype;
typedef
struct
rectype;
typedef rectype list[maxsize +1]
;void
headsort
(list r,
int n)
;int
main()
headsort
(r, num)
;for
(int i =
1; i <= num ; i++
)for
(int i =
1; i <= num; i++)}
void
sift
(list r,
int p,
int q)
}void
headsort
(list r,
int n)
}
C 字串按 ASCII碼 排序,注意其中的小坑
在和銀行做資料對接時,涉及到資料傳輸時的驗簽及加密。其中資料簽名方案中就要求資料項根據屬性名按 ascii碼 進行公升序排序。c 中的ascii碼排序並不是表面上那麼簡單,一不小心就入坑了。因為c 的排序預設並不是按照ascii碼進行排序的。舉個例子,我有這樣乙個字串陣列,然後對其排序。string...
字串與ASCII碼互換
public static void main string args ascii碼怎麼轉為字元 public static void asctostring 就是將string字元型別資料轉換為integer整型資料 第一步把獲取到的ascii碼放入字串陣列內 第二步,integer.parsei...
C 下ASCII碼轉字串
typedef vectorstrvector void ascii2string const char sz,strvector v1 val val 16 str 0x str v1.push back str p void output const char sz,strvector v1 f...