C語言——計(jì)數(shù)排序

  • 待排序的數(shù)組A
  • 從數(shù)組中取出最大值k
  • 新建一個(gè)數(shù)組B,用于存儲(chǔ)排序的輸出
  • 新建一個(gè)數(shù)組C,C.length = k+1,用于臨時(shí)存儲(chǔ)空間

原理
如果A中出現(xiàn)數(shù)m的次數(shù)為n,則C[m] = n,在依據(jù)C對(duì)A輸出到B中。

實(shí)現(xiàn)



/****************************************************************
 *                              計(jì)數(shù)排序
 ****************************************************************/


/****************************************************************
 * function     : getMaxIndex
 * description  : 獲取數(shù)組中最大值
 * input        : int A[],int length
 * output       : N/A
 * return value : int
 * author       : HanyoungXue
 * date         : 2018-4-18
 *****************************************************************/


int getMax(int A[],int length){
    int max = A[0];

    for (int i = 1; i < length; i++) {
        if (A[i]>max){
            max = A[i];
        }
    }
    return max;
}


/*****************************************************************
 * function     : countingSort
 * description  : 計(jì)數(shù)排序
 * input        : int A[],int B[],int k,int length
 * output       : int B[]
 * return value : N/A
 * author       : HanyoungXue
 * date         : 2018-4-18
 ******************************************************************/

void countingSort(int A[],int B[],int k,int length){
    int C[k+1];
    for (int i = 0; i < k+1; ++i) {
        C[i] = 0;
    }

    for (int j = 0; j < length; ++j) {
        C[A[j]]+=1;
    }

    for (int i = 1; i < k+1; ++i) {
        C[i] +=C[i-1];
    }

    for (int j = 0; j < length; ++j) {
        B[--C[A[j]]] = A[j];
    }
}

/**********************************************************
 * function     : print_array
 * description  : 打印一個(gè)數(shù)組
 * input        : int A[],int length, char *print_string
 * output       : N/A
 * return value : N/A
 * author       : HanyoungXue
 * date         : 2018-4-15
 ***********************************************************/

void print_array(int A[],int length,char *print_string){
    printf("%s\n", print_string);
    for (int i = 0; i < length ; ++i){
        printf("%d\t",A[i]);
    }
    printf("\n");
}



void initARandom(int A[],int length){
    srand(time(NULL));
    for (int i = 0; i < length; ++i) {
        A[i] = rand()%60;
    }
}

int main(int argc, char const *argv[])
{
    int length = 12;
    int A[length];
    /*****************************************
     * 計(jì)數(shù)排序測(cè)試
     *****************************************/

    initARandom(A,length);
    print_array(A,length,"before counting sort:");
    int B[length];
    countingSort(A,B,getMax(A,length),length);
    print_array(B,length,"after counting sort:");


    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 數(shù)組在程序設(shè)計(jì)中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱...
    朱森閱讀 4,279評(píng)論 2 13
  • 這個(gè)不錯(cuò)分享給大家,從扣上看到的,就轉(zhuǎn)過來了 《電腦專業(yè)英語》 file [fail] n. 文件;v. 保存文...
    麥子先生R閱讀 7,118評(píng)論 5 24
  • 嗨 …… 寶貝 我是你媽媽 本想說筆如千斤重 但媽媽卻是兩個(gè)拇指噠噠噠的在手機(jī)屏上敲打著 仍舊感覺“下筆”沉重 有...
    外婆叫我小黃鸝閱讀 289評(píng)論 0 0
  • 請(qǐng)?jiān)试S我為這篇很短的小說寫序,正如你所料,它只有十日,只有十篇。我的生活很平凡,但我的內(nèi)心并不平靜。 我寫的絕不是...
    南極的狗閱讀 254評(píng)論 0 0
  • 社會(huì)的發(fā)展以及年齡能力的增長,使我們?cè)絹碓诫y以在某個(gè)崗位或者圈子一直生存下去了,或者你會(huì)被要求成為管理者,或者你會(huì)...
    轉(zhuǎn)瞬之夏的日記本閱讀 790評(píng)論 0 0

友情鏈接更多精彩內(nèi)容