2013-11-23 65 views
-5

所以我想我昨天解決了這個問題,當你們回答我的問題時,但今天我意識到我忘記了我禁用了名爲bubbleSort ),一旦我啓用該功能,直接在main下面的addRandomNumbers()函數開始生成與隨機數相同的數字,而不是再次生成不同的數字,即使我在程序啓動時將發生器播種一次。它只產生不同的隨機數,如果我禁用bubbleSort()函數,這是奇怪的,因爲那是一個完全不同的函數。 但我那種需要冒泡排序功能,從而使的binarySearch()函數,我去做出將工作我以爲我昨天修好了,但我搞砸了,它仍然產生相同的隨機數

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

#define clear  system("cls") 
#define pause  system("pause") 
#define SIZE  5000 
#define LB   1 //this is the lower bound 
#define UB   500 //this is the upper bound 


//Lets Prototype 
void addRandomNumbers(int n[]); 
void binarySearch(int n[],int c[]); 
void bubbleSort(int n[]); 
void displayRandomNumbers(int n[],int c[]); 

int main(){ 
    int numbers[SIZE]={0}, counter[SIZE]={0}; 
    srand((unsigned)time(NULL)); 

    addRandomNumbers(numbers); 
    bubbleSort(numbers); 
    binarySearch(numbers,counter); 
    displayRandomNumbers(numbers,counter); 

}//end main 

void addRandomNumbers(int n[]){ 
    int i; 

    for (i=0; i < SIZE; i++){ 
    n[i] = LB + rand() % (UB - LB + 1); 
    } 
}//end addRandomNumbers 

void bubbleSort(int n[]){ 
    int i,temp=0; 
    for(i=0;i<SIZE-1;i++){ 
     temp=n[i]; 
     n[0]=n[1]; 
     n[i+1]=temp; 
    }//end for loop 
}//end bubble sort 

void binarySearch(int n[],int c[]){ 
    int i,k=0,l,u,mid; 


    for(i=0;i<SIZE;i++){ 

     l=0,u=SIZE-1; 
     while(l<=u){ 
      mid=(l+u)/2; 
      if(n[i]==n[mid]){ 
       k++; 
       break; 
      } 
      else if(n[i]<n[mid]){ 
       u=mid-1; 
      } 
      else 
       l=mid+1; 
     }//end while loop 
     c[i]=k; 
    }//end for loop 
} 

void displayRandomNumbers(int n[], int c[]){ 
    int i; 
    char flag; 
    for(i=0;i<UB;i++) 
     if(c[i]<100)  
     printf("The number %i appears %i times\n",n[i],c[i]); 
     pause; 
}//end displayRandomNumbers 
+0

您的bubblesort函數用第一個元素填充數組。並有1緩衝區溢出... – hyde

+0

」和「」和其他頭文件在哪裏? – haccks

+0

你在哪個平臺上運行這個平臺?它提供了什麼輸出? –

回答

0

這就是你所謂的bubbleSort這實際上並不是一種氣泡排序的實現,它以相當複雜的方式填充你的數組。 (如果它沒有比較數組的值,它怎麼可能是一個排序函數?)

爲什麼不使用C標準庫qsort函數如果你不知道如何正確地實現一個排序算法?

+0

謝謝..我的教授實際上給了我們,泡沫排序算法,因爲他認爲他wouldnt能夠在我們的關卡中創建一個...但我會查找qsort。很高興知道這個問題不是播種時間 – NightMusume

1

我認爲你看到了同樣的數字作爲顯示輸出概率。

如果我能總結一下你的程序,您可以:

  1. 充滿LB(1)和UB(500)(addRandomNumbers功能)
  2. 的數組排序之間的數字5000長度的數組(bubbleSort功能)
  3. 打印第一個元素(displayRandomNumbers函數)。

讓我們假設你的排序功能起作用。如果該值爲的5000個數字的任何,則排序後的數組的第一個元素將爲1。這可能是2如果沒有選定1值,也可能是3

是什麼,你會看到一個2或更多數量的數組的第一個元素的概率是多少?這是ZERO值1被抽樣的概率。假設均勻概率(其您的採樣方法不提供):

p(zero observations of 1) = (499/500)^(5000) = 0.00005

換句話說,這是很可能你的未排序的陣列將包含1某處的值。當對它進行排序時,該值將成爲數組的第一個元素。

+0

我其實只是發佈了與我最後一個問題相同的代碼,因爲我認爲我只需要改變一件事就可以向我們展示我手邊的問題,但我更新了當前代碼的問題,因爲我意識到改變太多以至於無法使用該代碼舊代碼 – NightMusume

+0

好吧,這聽起來像您描述了您的程序展示的問題,併發布了該程序的舊版本的代碼。我的回答是用您的問題的原始版本編寫的。 – NicholasM

+0

我知道這是,那是我評論告訴你的。上次我搞砸了一些事情後,我發佈了一個新的問題,人們生我的氣,並讓我改變原來的問題。我猜想沒有正確的方法去做 – NightMusume