Home > Back-end >  How to sort Hexadecimal Numbers (like 10 1 A B) in C?
How to sort Hexadecimal Numbers (like 10 1 A B) in C?

Time:09-17

I want to implement a sorting algorithm in C for sorting hexadecimal numbers like:

10 1 A B

to this:

1 A B 10

The problem that I am facing here is I didn;t understand how A & B is less than 10 as A = 10 and B = 11 in hexadecimal numbers. Im sorry if I am mistaken. Thank you!

CodePudding user response:

As mentioned in the previous comments, 10 is 0x10, so this sorting seems to be no problem: 0x1 < 0xA < 0xB < 0x10

CodePudding user response:

In any base a number with two digits is always greater than a number with one digit.

In hexadecimal notation we have 6 more digits available than in decimal, but they still count as one "digit":

 hexadecimal digit | value in decimal representation
                 A | 10
                 B | 11
                 C | 12 
                 D | 13
                 E | 14
                 F | 15

When you get a number in hexadecimal notation, it might be that its digits happen to use none of the above extra digits, but just the well-known 0..9 digits. This can be confusing, as we still must treat them as hexadecimal. In particular, a digit in a multi-digit hexadecimal representation must be multiplied with a power of 16 (instead of 10) to be correctly interpreted. So when you get 10 as hexadecimal number, it has a value of one (1) time sixteen plus zero (0), so the hexadecimal number 10 has a (decimal) value of 16.

The hexadecimal numbers you gave should therefore be ordered as 1 < A < B < 10.

As a more elaborate example, the hexadecimal representation 1D6A can be converted to decimal like this:

  1D6A    
  │││└─>  10 x 16⁰ =   10
  ││└──>   6 x 16¹ =   96
  │└───>  13 x 16² = 3328
  └────>   1 x 16³ = 4096
                     ────  
                     7530

Likewise

  10    
  │└─>   0 x 16⁰ =    0
  └──>   1 x 16¹ =   16
                     ──  
                     16
  • Related