此代码用于创建数组并对其进行排序,我的homeworks请求是计算它运行的时间。但似乎这段代码不起作用。当我输入$./sorting select v 20000
时,shell说分段错误,我不知道应该在哪里修复。
#include <stdio.h>
#include <math.h>
#include <stdint.h>
#include <stdlib.h>
int* insertionSort(int * arr,int len){
for (int i=1; i<len; i++){
int x=arr[i];
int j=i;
while (j>0 && x<arr[j-1]){
arr[j]=arr[j-1];
j--;
}
arr[j]=x;
}
return arr;
}
int* selectionSort(int* arr,int len){
int pos=0;
for (int i=0; i<len;i++){
int minpos=arr[i];
for (int j=i; j<len; j++){
if (minpos>arr[j]){
minpos=arr[j];
pos=j;
}
}
int x=arr[i];
arr[i]=minpos;
arr[pos]=x;
}
return arr;
}
int* create_array(char category, int n){
int *arr=malloc(n*sizeof(int));
if (category=='s'){
for (int i=0;i<n;i++){
arr[i]=i;
}
}
else if (category=='v'){
for (int i=n-1;i>=0;i--){
arr[i]=i;
}
}
else if (category=='r'){
for (int i=0;i<n;i++){
arr[i]=i;
}
for(int i = 0; i < n; i++){
int j = rand() % n;
int t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
else {return NULL;}
return arr;
}
void main(char sort_algo,char category,int array_size){
int *arr=create_array(category,array_size);
if (&sort_algo == "select"){
selectionSort(arr,array_size);
}
else{
insertionSort(arr,array_size);
}
}
答案 0 :(得分:0)
你应该修改你的main函数,如果你想获取命令行参数,原型必须如下所示:
int main(int argc,char * argv [])
您还必须考虑WeatherVane和Bence Kaulics的建议,并阅读为更好地理解概念而建议的内容。
作为旁注,我已经修改了你的代码(最低限度),它现在就会运行。可以做很多改进。继续学习!
#include <stdio.h>
#include <math.h>
#include <stdint.h>
#include <stdlib.h>
int* insertionSort(int * arr,int len){
int i;
for (i=1; i<len; i++){
int x=arr[i];
int j=i;
while (j>0 && x<arr[j-1]){
arr[j]=arr[j-1];
j--;
}
arr[j]=x;
}
return arr;
}
int* selectionSort(int* arr,int len){
int pos=0;
int i;
for (i=0; i<len;i++){
int minpos=arr[i];
int j;
for (j=i; j<len; j++){
if (minpos>arr[j]){
minpos=arr[j];
pos=j;
}
}
int x=arr[i];
arr[i]=minpos;
arr[pos]=x;
}
return arr;
}
int* create_array(char category, int n){
int *arr=malloc(n*sizeof(int));
if (category=='s'){
int i;
for (i=0;i<n;i++){
arr[i]=i;
}
}
else if (category=='v'){
int i;
for (i=n-1;i>=0;i--){
arr[i]=i;
//printf("%d\n",i);
}
}
else if (category=='r'){
int i;
for (i=0;i<n;i++){
arr[i]=i;
}
for(i = 0; i < n; i++){
int j = rand() % n;
int t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
else {return NULL;}
return arr;
}
//main with command line arguments
int main( int argc, char *argv[] ) {
// argv[0] argv[1] argc[2] argv[3]
// sorting select v 20000
int num;
sscanf (argv[3],"%d",&num);
int *arr=create_array(argv[2][0],num);
if(strcmp(argv[1],"select")==0){
selectionSort(arr,num);
}
else{
insertionSort(arr,num);
}
}
&#13;