рдУ (рдПрди) рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдмрд┐рдЯрд╕реЙрд░реНрдЯрд░рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдердо

рдЫрд╡рд┐

рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕


рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдЖрдХрд╛рд░ рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдУ рд╣реЛрдЧреА (рдПрди) рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдирд╣реАрдВ рд▓реЗрдЧрд╛ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЙрд╕рдиреЗ рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ред

рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реИрдВ:

рд╣рдо, рдорд╛рдирд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдРрд░реЗ рдХреЛ рдХреИрд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВрдЧреЗ? рдпрд╣ рд╕рд╣реА рд╣реИ, рд╣рдо рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдиреЗрддреНрд░рд╣реАрди рд▓рдВрдмреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗред
рдФрд░ рдЕрдЧрд░ рд▓рдВрдмрд╛рдИ рд╕рдорд╛рди рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╢реНрд░реЗрдгреА рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЖрдк рдмрд╕ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо


рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдирдкреБрдЯ рд╕рдВрдЦреНрдпрд╛ N рдХреЗ рдЖрдХрд╛рд░ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ:
int[] array = new int[n] 

рдЕрдЧрд▓рд╛, рд╣рдо рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдмрд╛рдЗрдирд░реА рдлреЙрд░реНрдо рдореЗрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирдИ рд╕реВрдЪреА рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ:
 bool[][] bitMatrix = new bool[n][]; //    for (int i = 0; i < array.Length; i++) { BitArray bitArray = new BitArray (new int[1]{ array [i] }); bool[] bits = new bool[bitArray.Length]; bitArray.CopyTo (bits, 0); Array.Reverse (bits); bitMatrix [i] = bits; } 

рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдорд┐рд▓реА:
рдЫрд╡рд┐

рдлрд┐рд░ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ рдЖрддрд╛ рд╣реИ: рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЫрдВрдЯрд╛рдИред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдЗрд╕ рдмрд┐рдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдХреИрд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░реЗрдВрдЧреЗ:
  1. рд╣рдо рдкрд╣рд▓реЗ рдХреЙрд▓рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ
  2. рд╣рдо рдЙрди рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдкрд╣рд▓реА рдмрд┐рдЯ рдПрдХ рд╕реВрдЪреА рдореЗрдВ 1 рд╣реИ
  3. рд╣рдо рдЙрди рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рджреВрд╕рд░реА рд╕реВрдЪреА рдореЗрдВ рдкрд╣рд▓рд╛ рдмрд┐рдЯ 0 рд╣реИ
  4. рдкрд╣рд▓реА рдФрд░ рджреВрд╕рд░реА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдЪрд░рдг 2 рдФрд░ 3 рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрд▓рдо рдирдВрдмрд░ рджреЛ рдХреЗ рд▓рд┐рдП

рдЫрд╡рд┐

рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 private void SortAlgorithm(bool[][] bitMatrix, int columnNumber) { List<bool[]> ones = new List<bool[]> (); List<bool[]> zeros = new List<bool[]> (); for (int i = 0; i < bitMatrix.Length; i++) { if (bitMatrix[i][columnNumber]) ones.Add(bitMatrix[i]); else zeros.Add(bitMatrix[i]); } columnNumber++; if (columnNumber == MAX_COLUMN_COUNT)//MAX_COLUMN_COUNT = sizeof(int)*8 { sortedBitMatrix.AddRange(ones); sortedBitMatrix.AddRange(zeros); return; } if (ones.Count != 0) SortAlgorithm (ones.ToArray(), columnNumber); if (zeros.Count != 0) SortAlgorithm (zeros.ToArray(), columnNumber); } 

рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рдмрд┐рдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдмрд┐рдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
 private int[] ConvertBitMatrixToArray(List<bool[]> bitMatrix) { int[] resultArray = new int[bitMatrix.Count]; int count = 0; for (int i = 0; i < bitMatrix.Count; i++) { bool[] bits = bitMatrix [i]; Array.Reverse(bits); BitArray bitArray = new BitArray(bits); int[] tmpArray = new int[1]; bitArray.CopyTo(tmpArray, 0); resultArray [count] = tmpArray [0]; count++; } return resultArray; } 

рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдХреНрд░рдордмрджреНрдз рд╕рд░рдгреА рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдХрд╛ рдХреНрдпрд╛?


рдЪреВрдБрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдмрд┐рдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдФрд░ рд╢реВрдиреНрдп рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдИ рдзрд╛рдЧреЛрдВ рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рднрд╛рдЧ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдФрд░ рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рджрд┐рдЦреЗрдЧрд╛:
рдЫрд╡рд┐

рдЬрдЯрд┐рд▓рддрд╛


рджрд┐рдП рдЧрдП рд╕рд░рдгреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
  1. рдПрдХ рдмрд┐рдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдирд╛: рдПрди
  2. рд╢реВрдиреНрдп рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ: 32n
  3. рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреНрд░рдордмрджреНрдз рдмрд┐рдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕: рдПрди


рдХреБрд▓: 34 рдПрди, рдЬреЛ рд╣реЗ (рдПрди) рд╣реИ

рдЖрдкрдХреА рд░рд╛рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

PS github.com/koljaka/BitSorting

Source: https://habr.com/ru/post/In215357/


All Articles