2012-12-02 30 views
2

我寫在ANSI C代碼,這個代碼必須完成一個單一的,簡單的任務:排序陣列將無法工作在ANSI C

  • 排序數組
  • 在一個陣列搜索如果發現一個元素
  • 回報元素位置
  • 否則返回-1

我定義我的功能是這樣的:

int search_sorted(int *array, int dimensione, int elemento) { 
    int i; 
    for(i=0;i<dimensione;i++){ 
     //fill the array with random numbers 
     *(array+i)=((int)(rand()%RANDOM_MAX)); 
    } 
    sort(array,dimensione); 
    //this should actually sort the array? 
    for(i=0;i<dimensione;i++){ 
     printf(" posizione %d\t -\t %d\n",i+1,array[i]); 
     //print the array... 
    }  
    for(i=0;i<dimensione;i++){ 
     if(elemento>array[i]){ 
      return -1; 
     } else if(array[i] == elemento) { 
     return ++i; 
     }  
    } 
    return -1; 
} 

//sorting function 
int sort (int *array,int dim){ 
int i, temp; 
for (i=0;i<(dim-1);i++){ 
    if(array[i]>array[i+1]){ 
      temp=array[i+1]; 
      array[i+1]=array[i]; 
      array[i]=temp; 
    } 
} 

}

的問題是,排序根本不適用,我沒有看到一個原因,它不會......我100%肯定,我傳遞正確的元素(沒有編譯錯誤,也沒有任何...)

任何想法爲什麼它不工作,以及如何解決這個問題?

回答

3

您正試圖實施氣泡排序算法。您的實施不正確。 你的循環只是把最偉大的元素放在最後的位置。

你需要使用另一個應該嵌套這個循環的循環。

for(j=0;j<dim-1;j++) 
for (i=0;i<(dim-1-j);i++){ 
    if(array[i]>array[i+1]){ 
      temp=array[i+1]; 
      array[i+1]=array[i]; 
      array[i]=temp; 
    } 
+0

爲什麼選擇投票? – asheeshr

+0

好吧,我泡泡排序,並提出了一些真正有用的東西,我不知道這樣的東西已經存在,但我不明白爲什麼我的不適用(我的意思是,我明白我缺乏很多迭代,但我的甚至不會交換一個單元格...) –

+1

我沒有downvote,但你的答案最初只是無用的「你的實現是不正確的」在你編輯它之前,所以我並不感到驚訝被降低了。 – interjay