C語言之IP排序

2021-08-24 19:02:24 字數 530 閱讀 4957

看到乙個比較初級的問題,4個字段的ip,如何排序?

分析:排序是按每個欄位的整數值進行,而整個ip位址是字串型,故需要逐個字段讀取。

注意到每個欄位0~255,可以用乙個位元組表示,而要比較大小,故用unsigned char型。

讀取後,最自然的想法是逐個字段比較,依次比較4個字段,這個可以分別對每個字段呼叫排序。

想到基數排序的原理,不妨以256作為基數實施基數排序。

想到這裡,既然有這麼個特殊數字256,我們的字段都是模256的餘數,可以將所有字段按照所在位置乘以256的對應次冪;這樣得到乙個整數,只需對該整數排序即可。這個同進製的原理,即256進製,於是,同進製比較大小一樣,結果的排序即為索求排序,不過這個要用指標或者下標等方法將兩者對應。

想到這裡,記得c語言提供了union的機制,不妨一用。定義

union

ip;這樣,可以以ip.one_ip讀入4個子段,再以 ip.four_ip 進行比較,與上面的類似,但少了求值這一步。簡潔了不少。不過,必須注意讀入的字段的順序,必須高字段在高位,不然比較的結果沒意義。

C語言之桶排序

桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間 n 但桶排序並不...

C語言之排序演算法

排序演算法是演算法裡面的基礎,演算法主要是考驗思維,在這裡會介紹三個簡單的演算法 直接插入排序,選擇排序,氣泡排序。直接插入排序 直接插入排序經過 n 1 次迴圈將需要排序的元素排序好,每一次迴圈依次新增乙個後面的新元素到前面排好序的元素中,時間複雜度為 n 2 如下 直接插入排序 引數 需要排序的...

C語言之氣泡排序

其實就是把乙個陣列的元素,按照從小到大 從大到小 得順序,重新排列起來,這種排序就叫氣泡排序 例 int nums 5 經過排序後 下標0的元素變成了1 下標1的元素變成了2 下標2的元素變成了3 下標3的元素變成了4 下標4的元素變成了9 有n輪,每輪從第乙個元素開始跟下乙個元素進行比較,大的放在...