2016-08-02 35 views
-2

算法正常工作與整數,但因爲我它們轉換成char,它已被用於輸出打印空:得到一系列的小寫字母排序

/* sort a series of lower case letters using quicksort algorithm. */ 
#include <stdio.h> 

#define N 10 

// since c gets the ascii code when returning an int for a char variable. 

char quicksort(char a[], char low, char high); 
char split(char a[], char low, char high); 
int a[N]; 

int main(void) 
{ 
    int i; 

    printf("Enter letters to be sorted: "); 
    for (i = 0; i < N; i++) 
     scanf("%d", &a[i]); 
    quicksort(a, 0, N - 1); 

    printf("In sorted order: "); 
    for (i = 0; i < N; i++) 
     printf("%s ", a[i]); 
    printf("\n"); 

    return 0; 
} 
char quicksort(char a[], char low, char high) 
{ 
    int middle; 

    if (low >= high) return; 
    middle = split(a, low, high); 
    quicksort(a, low, middle - 1); 
    quicksort(a, middle + 1, high); 
} 
char split(char a[], char low, char high) 
{ 
    char part_element = a[low]; 

    for (;;) { 
     while (low < high && part_element <= a[high]) 
      high--; 
     if (low >= high) break; 
     a[low++] = a[high]; 

     while (low < high && a[low] <= part_element) 
      low++; 
     if (low >= high) break; 
     a[high--] = a[low]; 
    } 

    a[high] = part_element; 
    return high; 
} 
+3

在'scanf'使用 「%C」 讀取炭。 –

+0

除非你只想使用quicksort算法,否則使用'stdlib.h'中的'qsort'會更好。你所要做的就是編寫一個比較函數,然後調用'qsort'傳遞數組,大小,元素大小和比較函數。 5行代碼。 –

回答

0

修改後的代碼仍然不起作用,我似乎無法找到該錯誤。

您的問題似乎與main()沿着其他人建議對於使用char面向數據,而不是int線條漂亮多了。有一些非致命的可疑選擇問題,例如使用char數據類型作爲數組索引; quicksort()被宣告返回char,但不返回任何內容;等等。下面是你的代碼的返工,多爲風格,結合不同的人建議:

/* sort a series of letters using quicksort algorithm. */ 

#include <stdio.h> 

#define N (10) 

void quicksort(char a[], int low, int high); 
int split(char a[], int low, int high); 

int main(void) 
{ 
    char a[N]; 

    printf("Enter letters to be sorted: "); 

    for (int i = 0; i < N; i++) { 
     scanf("%c", &a[i]); 
    } 

    quicksort(a, 0, N - 1); 

    printf("In sorted order: "); 

    for (int i = 0; i < N; i++) { 
     printf("%c ", a[i]); 
    } 
    printf("\n"); 

    return 0; 
} 

void quicksort(char a[], int low, int high) 
{ 
    if (low < high) { 
     int middle = split(a, low, high); 
     quicksort(a, low, middle - 1); 
     quicksort(a, middle + 1, high); 
    } 
} 

int split(char a[], int low, int high) 
{ 
    char part_element = a[low]; 

    for (;;) { 
     while (low < high && part_element <= a[high]) { 
      high--; 
     } 
     if (low >= high) { 
      break; 
     } 
     a[low++] = a[high]; 

     while (low < high && a[low] <= part_element) { 
      low++; 
     } 
     if (low >= high) { 
      break; 
     } 
     a[high--] = a[low]; 
    } 

    a[high] = part_element; 

    return high; 
} 

這豈不是盡一切它應該?

> ./a.out 
Enter letters to be sorted: aadircslne 
In sorted order: a a c d e i l n r s 
> 
+0

看起來像分裂功能有問題,因爲它不顯示輸出中的所有字母。 – arihanian

+0

@arihanian - 提供輸入/輸出失敗的示例。我已經在我的答案中添加了一個用法示例 - 您是否在輸入中添加空格或某些內容? – cdlane

+0

這對我來說很糟糕。該程序運行完美。這真的有很大的幫助,因爲我正在加速運行c的基礎知識,並且我在quicksort算法上卡住了 – arihanian

0

scanf需要%c格式說明。你scanf應更改爲

scanf("%c", &a[i]); 

因此,你應該a陣列重新聲明,以char,不int

2

三個問題:

  1. a被聲明爲int數組,但所有的功能處理的char陣列。這意味着它們不會正確地遍歷數組。將其更改爲char a[N]
  2. 要讀取字符,請使用%c格式說明符至scanf
  3. 要打印字符,請使用%c格式說明符至printf
+0

爲什麼不只是調試呢? –

相關問題