fork(1) download
  1. /*
  2. 配列の値のソートについて以下の通りに関数q_sort(int *a, int left, int right)を作れって問題なんですがさっぱりわからないので教えて下さい
  3. 1)配列中の適当な値(例えば中央にある値)をkey値とする
  4. 2)a. 左からkeyより大きい値を探し見つかったらストップ(i番目)
  5.   b. 右からkeyより小さい値を探し見つかったらストップ(j番目)
  6.   c. i≧jなら 3) へ、そうでなければi番目の値とj番目の値を入れ替えて、i+=1, j-=1 として 2)a から繰り返し
  7. 3)前方の配列の長さが2以上なら 1) 2) を繰り返す(前方の配列に対して関数q_sortの再帰呼び出し)
  8. 4)後方の配列の長さが2以上なら 1) 2) を繰り返す(後方の配列に対して関数q_sortの再帰呼び出し)
  9. */
  10.  
  11. #include <stdio.h>
  12.  
  13. void q_sort(int *a, int left, int right)
  14. {
  15. int k, i = left, j = right, m = (right + left) / 2;
  16. while(1){
  17. for( ; i <= right; ++i) if(a[i] > a[m]) break;
  18. for( ; j >= left; --j) if(a[j] < a[m]) break;
  19. if(i >= j) break;
  20. k = a[j]; a[j] = a[i]; a[i] = k;
  21. ++i; --j;
  22. }
  23. if(m - left > 0) q_sort(a, left, m);
  24. if(right - m > 0) q_sort(a, m, right);
  25. }
  26.  
  27. int main(int ac, char **av)
  28. {
  29. int i, ary[5] = {3, 1, 4, 5, 2};
  30. q_sort(ary, 0, 4);
  31. for(i = 0; i < sizeof(ary) / sizeof(ary[0]); ++i) printf("%d, ", ary[i]);
  32. return 0;
  33. }
Time limit exceeded #stdin #stdout 5s 2288KB
stdin
Standard input is empty
stdout
Standard output is empty