كيفية استخدام فرز التوزيع (فرز الجذر، الخ) لفرز السلاسل؟

StackOverflow https://stackoverflow.com//questions/9638602

  •  10-12-2019
  •  | 
  •  

سؤال

أعرف كيفية استخدام الفرز الجذري لفرز الأعداد الصحيحة.

ولكن كيف يمكن استخدامه لفرز السلاسل؟أو أرقام تعويم؟

هل كانت مفيدة؟

المحلول

يمكن استخدام الفرز الجذري أو أي فرز توزيع آخر لفرز أرقام الفاصلة العائمة إذا تجاهلت بعض خصائصها مثل اللانهاية، والقيم غير العددية، وتمثيلين مختلفين للصفر. إيي 754-2008 تحتوي أرقام الفاصلة العائمة على تمثيلات ثنائية، وهي متوافقة في ترتيب الفرز مع الأرقام الصحيحة.لذا، إذا استبعدت أرقامًا غير محددة وأعدت تفسيرها float أو double مثل int32 أو int64, ، يمكنك تطبيق أي نوع توزيع عليها مباشرةً. يحرر: تحتاج أرقام الفاصلة العائمة السالبة إلى معاملة خاصة (كما أشار AShelly)، لأن ترتيب فرزها معاكس لترتيب فرز الأعداد الصحيحة.

مع السلاسل، يكون الأمر أكثر صعوبة بسبب طولها المتغير.يمكن استخدام نوع آخر من فرز التوزيع (فرز الجرافة) وغالبًا ما يستخدم للسلاسل.يتم استخدام عدة أحرف بداية للسلسلة لفهرسة المجموعة، ثم يتم استخدام أي فرز مقارن لفرز السلاسل داخل المجموعة.

إذا كانت جميع السلاسل متساوية الطول تقريبًا و/أو تم استخدام بعض التقنيات لتضخيم الاختلافات بين السلاسل (كما هو موضح في الفصل 6 من "سريع:بحث سريع عن شجرة حساسة للهندسة المعمارية على وحدات المعالجة المركزية ووحدات معالجة الرسومات الحديثة")، فيمكن استخدام فرز الجذر أيضًا:قم بتقسيم السلسلة إلى مجموعات من الأحرف (أو بالأحرى، إلى مجموعات من البتات) متساوية الطول، وأعد تفسير هذه المجموعات كأعداد صحيحة، واستمر كما لو كانت فرزًا جذريًا للأعداد الصحيحة.

يحرر: جميع أنواع فرز التوزيع مضمونة للعمل بشكل صحيح فقط مع سلاسل ASCII.قد تتطلب ترميزات السلسلة الأخرى ترتيب فرز مختلفًا أو قد تعتمد على معلمة "الترتيب" الخاصة بالإعدادات المحلية.

نصائح أخرى

نعم فمن الممكن.

شاهد راديكس فرز، قم بفرز بيانات تعويم for floats.يستخدم حقيقة أن يطفو يطفو إلى أنواع عدد صحيح مقارنة بشكل صحيح (بمجرد تصحيح السلبيات ل).انظر هذه المقالة for details

للحصول على سلاسل، يمكنك حل مشكلة متغيرة الطول عن طريق القيام بفرز MSD Radix وضمان التوقف عن تنازلي عند مواجهة Nulls.انظر تم تطبيق راديكس في C ++ لسلسلة .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top