這段代碼用於創建數組並對其進行排序,我的作業請求是計算它運行的時間。但似乎這個代碼不起作用。當我輸入$./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);
}
}
'無效的主要(炭sort_algo,焦炭類,INT ARRAY_SIZE)'是奇異'main'。那是你輸入「select v 20000」的方式嗎? –
糾正'main'從'* argv []'中提取參數後,您將會遇到'if(&sort_algo ==「select」)''將會*從不*爲真的問題,因爲它正在比較指針記憶中不同地方的物體。使用'strcmp()'。 –
@BLUEPIXY yep,th request is「Your program must take in three parameters(sort_algo ['select'|'insert'],category ['s','r','v'],array_size )。例如,假設你的程序被稱爲'排序'來測試一個大小爲20000的隨機數組的選擇排序,我們運行(省略時間指令): ./sorting select r 20000 – UUsss