알파의 가장 간단한 방법은 C에서 숯불 배열을 분류하는 것은 무엇입니까?
문제
나는 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;
}
단지 시도 버블 정렬 이것이 가장 쉬운 정렬 알고리즘입니다.
쉬운? 거품 정렬을하십시오.
이것은 숯이 아닌 자바와 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;
제휴하지 않습니다 StackOverflow