盈佑 發問時間: 電腦與網際網路程式設計 · 1 0 年前

Dev_C 亂數產生

如何亂數產生A~Z

再利用合併排序法和快速排序法以小到大排列!

大大们幫幫忙吧..

小弟C語言真的很差

已更新項目:

大大..很不好意思,

我不知道你說修的意思要修哪耶!

因為我這個部分真的很差勁..

可是又必須交這個作業...幫幫忙嘿..

謝謝..

1 個解答

評分
  • 1 0 年前
    最佳解答

    用rand()產生亂數。產生A~Z↓

    char t = (char)((rand() % 26) + 65); // 產生0~25的亂數,再加上65。

    // 因為A的ASCII是65,所以(char)(0+65)='A';(char)(25+65)='Z'。

    合併排序法↓

    void merge_sort(int array[], int start, int end)

    {

    if((start + 2) > end){}

    else if((start + 2) == end)

    {

    if(array[start] > array[start+1])

    swap(array[start], array[start+1]);

    }

    else

    {

    int middle = start + end;

    middle = ((middle % 2)? (middle / 2 + 1):(middle / 2));

    merge_sort(array, start, middle);

    merge_sort(array, middle, end);

    // merge

    int i = start, j = middle;

    while( (i < end)&&(j < end) )

    {

    if(array[i] > array[j])

    {

    int a = array[j];

    for(int k = j; k > i; k--)

    array[k] = array[k-1];

    array[i] = a;

    i++;

    j++;

    }

    else

    i++;

    }

    }

    }

    快速排序法↓

    void quick_sort(int array[], int start, int end)

    {

    if(start >= end) return;

    int p = start, left = start, right = end-1;

    while(left < right)

    {

    while((array[left] <= array[p])&&(left < end))

    left++;

    while((array[right] > array[p])&&(right > start))

    right--;

    if(left < right)

    swap(array[left], array[right]);

    }

    swap(array[p], array[right]);

    quick_sort(array, start, right);

    quick_sort(array, right+1, end);

    }

    自己修吧~

    參考資料: me
    • 登入以對解答發表意見
還有問題?馬上發問,尋求解答。