簡體   English   中英

在C語言中對字符數組進行alpha排序的最簡單方法是什么?

[英]What would be the simplest way to alpha sort an array of chars in C?

我正在尋找一種簡單易懂的算法來按字母順序對C中的字符數組進行排序。

C中的字符具有恰好是按順序的數字值,因此您只需將字符視為整數即可。 C標准庫包含一個“ qsort”功能。 使用它(在類似linux的系統上使用man qsort )。 您可能必須將大寫字母轉換為小寫字母以簡化操作,但這很簡單。 如果您想了解quicksort算法(那是您應該學習的算法,因為您將實際使用它),請參閱Wikipedia

使用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;
}

如果結果適用於人類,則最好使用strcoll。 它比strcmp或strcasecmp慢,但它說明了非英語字符。 如果要使用它,請不要忘記為LC_COLLATE設置語言環境,即

setlocale(LC_COLLATE,“”);

只需嘗試最簡單的排序算法“ 冒泡排序”即可

我想知道您是否真的在尋找一種算法或只是一種解決問題的方法? 如果是后者,則使用C的qsort

如果您想要一個算法,請選擇插入排序選擇排序 ,因為它們很容易理解。

簡單? 進行氣泡排序。

這是java和int而不是char,但是您可以輕松地對其進行適應...

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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM