我有一个非常简单(或至少应该是)的赋值,我必须在大量随机数上运行bubblesort并查看其性能时间。然后我必须做同样的事情,除了将数组分成两半并在一个线程中排序一半而在另一个线程中排序另一个并查看它是否更快。
我之前从未使用过C,所以当涉及指针时,我完全无能为力,只使用了Java。这是我的代码,因为我只是想让bubblesort工作。
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <libgen.h>
int main() {
int *array[50000];
for(int i = 0; i < 50000; i++) {
array[i] = 1;
}
bubbleSort(array, 50000);
}
void bubbleSort(int *numbers[], int *array_size) {
int i, j, temp;
for(i = (array_size - 1); i > 0; i--) {
for(j = 1; j <= i; j++) {
if(numbers[j-1] > numbers[j]) {
temp = numbers[j-1];
numbers[j-1] = numbers[j];
numbers[j] = temp;
}
}
}
for(int i = 0; i < 10; i++) {
printf(numbers[i]);
}
}
我在这里尝试做的就是对数组进行排序,然后打印出前10个数字,这样我知道它正在工作。我得到了各种指针错误。
"bubbleSort.c", line 11: warning: improper pointer/integer combination: op "="
"bubbleSort.c", line 13: warning: implicit function declaration: bubbleSort
"bubbleSort.c", line 16: identifier redeclared: bubbleSort
current : function(pointer to pointer to int, pointer to int) returning void
previous: function() returning int : "bubbleSort.c", line 13
"bubbleSort.c", line 18: warning: improper pointer/integer combination: op "="
"bubbleSort.c", line 21: warning: improper pointer/integer combination: op "="
"bubbleSort.c", line 23: warning: improper pointer/integer combination: op "="
"bubbleSort.c", line 28: warning: argument #1 is incompatible with prototype:
prototype: pointer to const char : "/usr/include/iso/stdio_iso.h", line 206
argument : pointer to int
cc: acomp failed for bubbleSort.c
答案 0 :(得分:4)
此:
int *array[50000];
声明一个50,000个元素的指针数组int
,这可能不是你想要的。删除*
。
在bubbleSort()
原型中,你还有一些应该删除的虚假星号。
请注意,星号表示 C中的某些内容,您不应随意随意地随身携带您的代码。如果你不确定它意味着什么,时,你应该有权访问一些教程信息,如果这是一个类。开始阅读。
答案 1 :(得分:1)
第11行:您不应该声明int *array[]
而是int array[]
而不是
第13行:对您的功能进行原型设计或将其声明在您的主要上方
第16行:您声明了int *array_size
,但在主要部分中,您提供了int
第18,21和23行:与 11 相同
第28行:从不使用带有可变格式字符串的printf! printf("%i, ", numbers[i]);
就是这样。
你应该仔细阅读C编码基础知识