你們已經幫助了我很多這個代碼。讓我先說我不太熟悉C,並努力做到這一點。在C中創建大型數組時出現了分段錯誤
這檔節目應該做的:
1)創建長度爲10萬元 2)的隨機數的列表排序使用shell排序功能(仍然不工作正確的隨機數列表...我認爲它如何,我傳遞函數指針) 3)做一個列表1百萬更長
4)重複了高達1億,同時記錄時間(時間顯示爲0.0000000出於某種原因)
我只是試圖測試這個shell排序程序與內置的快速排序標準庫。
我試過有和沒有指針...當它的done..It只是弄亂的東西更多的笑
請幫我,你們一直這麼偉大到目前爲止註釋掉部分應該工作...
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void shellSort(int *A, int n);
void checkSort(int *A, int n);
int main(){
/*Initialize Random Array*/
int unsorted_list[10000000];
int *ptr = &unsorted_list[0];
int random_number;
int i;
srand (time(NULL));
for(i=0; i<10000000; i++){
random_number = rand();
unsorted_list[i] = random_number % 10000000;
}
//Do C Shell Sort
double shell_results[10][2];
double clock_diff;
int j=10000000;
clock_t t0, t1;
int k;
for(i=0;i<10;i++){
/*Sort the list using shellSort and take the time difference*/
t0 = clock();
shellSort(ptr, j);
t1= clock();
/*Take difference in time*/
clock_diff = (t1 - t0)/CLOCKS_PER_SEC;
/*Add time and list length to the results array*/
shell_results[i][0] = (double)j;
shell_results[i][1] = clock_diff;
/*Check to make sure the array has been sorted*/
checkSort(ptr, j);
/*Re-initialize a longer array*/
//j+=1000000;
//for(k=0; k<j; k++){
// random_number = rand();
// unsorted_list[k] = random_number % 1000000;
//}
printf("%d",(int)shell_results[i][0]);
printf(" ");
printf("%f",shell_results[i][1]);
printf("\n");
}
return 0;
}
void shellSort(int *A, int n){
int gap , i , j , temp;
for (gap = n/2; gap>0; gap /=2)
for (i=gap; i<n; i++)
for(j = i-gap; j>=0 && A[j] > A[j+gap]; j-=gap){
temp = A[j];
A[j] = A[j + gap];
A[j + gap] = temp;
}
}
void checkSort(int *A, int n){
int i;
for(i=0;i<n;i++){
if(A[i]>A[i+1]){
printf("Error in sorting \n");
break;
}
}
}
我應該從大小100,000,000的數組開始?或繼續做新的? – 2013-03-07 23:11:15
你當然可以那樣做,是的。 – 2013-03-07 23:16:13