2017-09-26 82 views
0

我想做一個char 2d數組的泡沫排序而不使用任何C庫函數,這是我有的代碼,但是當我編譯並運行時,沒有任何東西被排序。泡泡排序字符數組

聲明字符串:字符串[25] [1000];並充滿掃描儀輸入的輸入。

char temp; 

    for(int i =1; i < NUM; i++){ 
    for(int j = 0; j < NUM; j++){ 
     if (Strings[i-1] > Strings[i]){ 
     temp = *Strings[i]; 
     *Strings[i] = *Strings[j]; 
     *Strings[j] = temp; 
     } 
    } 
    } 
+0

嗨@Anna Truelove,歡迎來到SO,你谷歌你的錯誤信息? –

+0

'Strings [i-1]':當'i'爲0時,它變成'Strings [-1]',導致未經授權的訪問。如果其「二維數組」類型的「字符串[索引]」不是「char *」。所以'字符串[i] =字符串[j];'是不可能的。 – BLUEPIXY

+0

另外'Strings [i-1]'和'Strings [i]'是緊挨着的,但是'Strings [i]'和'Strings [j]'並不相鄰。並使用'strcmp'而不是'>'來比較字符串。 – BLUEPIXY

回答

1

因爲就像你在C你不能比較字符串。所以,你可以試試strcmp的功能。

首先,包含字符串頭文件。即,#include <string.h>

char tmp[1000]; 
int i,j,flag; 
for(i = 0, flag=1; i < NUM && flag==1; i++){ 
    for (j = 0, flag=0; j < NUM-i-1; j++){ 
     if (strcmp(Strings[j],Strings[j+1]) > 0){ 
       strcpy(tmp,Strings[j]); 
       strcpy(Strings[j],Strings[j+1]); 
       strcpy(Strings[j+1],tmp); 
       flag=1; 
     } 
     } 
} 
for(i=0;i<NUM;i++){ 
     printf("%s\n",Strings[i]); 
} 

通過冒泡排序標誌使用,稍微提高了其時間複雜度。