C/C++の宿題を片付けます 96代目at TECH
C/C++の宿題を片付けます 96代目 - 暇つぶし2ch160:デフォルトの名無しさん
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;
}


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch