알파의 가장 간단한 방법은 C에서 숯불 배열을 분류하는 것은 무엇입니까?

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

  •  02-07-2019
  •  | 
  •  

문제

나는 C로 문자 배열을 알파벳순으로 정렬 할 간단하고 이해하기 쉬운 알고리즘을 찾고 있습니다.

도움이 되었습니까?

해결책

C의 문자는 순서대로 발생하는 숫자 값이 있으므로 문자는 정수처럼 취급합니다. C 표준 라이브러리에는 'Qsort'기능이 포함되어 있습니다. 사용 (man qsort 리눅스와 같은 시스템에서). 물건을 단순화하기 위해 상류 문자를 소문자로 변환해야 할 수도 있지만 사소한 일입니다. QuickSort 알고리즘을 이해하려면 (실제로 사용하기 때문에 배워야 할 것입니다). 위키 백과.

다른 팁

결과가 인간을위한 것이면 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;
}

당신이 정말로 알고리즘을 찾고 있는지 아니면 문제를 해결하는 방법 일지 궁금합니다. 후자가 있다면 사용하십시오 C의 Qsort.

알고리즘을 원한다면 가십시오 삽입 정렬 또는 선택 정렬, 이해하기가 매우 간단합니다.

단지 시도 버블 정렬 이것이 가장 쉬운 정렬 알고리즘입니다.

쉬운? 거품 정렬을하십시오.

이것은 숯이 아닌 자바와 int이지만 쉽게 적응할 수 있습니다 ...

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