ما يمكن أن يكون أبسط طريقة ألفا نوع صفيف حرف في C ؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

أنا أبحث عن بسيطة وسهلة لفهم خوارزمية الترتيب الأبجدي لفرز مجموعة من الشخصيات في C.

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

المحلول

الشخصيات في " ج " القيم الرقمية التي يحدث أن تكون في النظام ، لذلك أنت فقط علاج شخصيات مثل الاعداد الصحيحه.C القياسية مكتبة تضم 'qsort' وظيفة.استخدام (man qsort على لينكس مثل النظام).قد تحتاج إلى تحويل الحروف الكبيرة إلى الصغيرة إلى تبسيط الأمور ، ولكن هذا تافهة.إذا أردت أن تفهم فرز سريع خوارزمية (هذا هو واحد يجب أن تعلم لأنك سوف تستخدم في الواقع) ، انظر ويكيبيديا.

نصائح أخرى

إذا كانت النتيجة هي المقصود من البشر ، فمن الأفضل استخدام strcoll.فمن أبطأ ثم strcmp أو strcasecmp لكنها تمثل الأحرف غير الإنجليزية.إذا كنت تنوي استخدام ذلك لا تنسى أن تعيين الإعدادات المحلية الخاصة بك على LC_COLLATE ، أي

setlocale(LC_COLLATE, "");

استخدام qsort الطريقة:

#include <stdlib.h>

int char_compare (const void * a, const void * b)
{
  return *(const char *)a - *(const char *)b;
}

int main(){
  const char char_array[] = { 'c', 'a', 'b' };

  qsort (char_array, 3, sizeof(char), char_compare);

  return 0;
}

وأتساءل عما إذا كنت حقا تبحث عن خوارزمية أو طريقة لحل المشكلة ؟ إذا كان هذا الأخير, ثم استخدام ج qsort.

إذا كنت ترغب في algorith, الذهاب نوع الإدراج أو اختيار نوع, كما أنهم بسيطة جدا لفهم.

مجرد محاولة فقاعة نوع هذا هو أسهل خوارزمية الفرز.

من السهل ؟ هل فقاعة نوع.

هذا هو جافا و الباحث بدلا من شار ، ولكن يمكنك تكييفه بسهولة...

int[] bubble(int a[])
    {
    for (int i = a.length; --i>=0; )
        {
        for (int j = 0; j<i; j++)
            {
            if (a[j] > a[j+1])
                {
                int T = a[j];
                a[j] = a[j+1];
                a[j+1] = T;
                }
            }
        }
    return(a);
    }

هذا هو بسيط جدا و مقارب أسرع (N هو حجم المصفوفة):

const unsigned char in[N];
unsigned char out[N], *p=out;
size_t cnt[N]={0}, i, j;
for (i=0; i<COUNT; i++) cnt[in[i]]++;
for (i=0; i<256; i++) for (j=cnt[i]; j; j--) *p++=i;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top