07/09/24 10:09:03
>>158
続き。関係ないところは行をつめている。
!! つきのコメントのあるところが主な修正箇所。
int quick_sort(const char *array[], int left ,int right,char *sort_array[]) {
int last = 0; int cnt = 0; int pivot = 0;
if(array == NULL || left < 0 || right < 0 || sort_array == NULL) return 0; //引数チェック
if(left >= right) return 1; //配列の要素が一つの場合
if(sort_array[0] == NULL){ //sort_array[0]がNULLならarrayをコピー
for(cnt = 0;cnt <= right;cnt++){
sort_array[cnt] = (char *)malloc(256); // !!malloc で適当に確保してからコピーする
strcpy(sort_array[cnt],array[cnt]);
}
}
pivot = (right+left)/2; //基準値を決める
change(sort_array, pivot, right); // !!pivot を最後に送りつける
pivot = right;
last = left;
for(cnt = left; cnt <= right;cnt++){ // !![left,last) は pivot 以下
if(sort_array[cnt][0] <= sort_array[pivot][0]){ // !!pivotが左側に入るために等号付き
change(sort_array,cnt,last++); !! last++ と後置インクリメント
}
}
quick_sort(array,left,last-2,sort_array); // !!array[last-1] が pivot なので抜く
quick_sort(array,last,right,sort_array);
return 1;
}