- 締切済み
大至急お願いします!!!!!!!
下記のプログラムが終了した時点でのj の値を示しなさい。 リストの初期値 L[1] 35 L[2] 10 L[3] 24 L[4] 22 L[5] 28 L[6] 14 L[7] 30 L[8] 8 i = 1; j = 8; sv = 22; while ( i <= j ) { while ( L[ i ] < sv ) i = i + 1; while ( L[ j ] > sv ) j = j - 1; if ( i <= j ) { temp = L[ i ] ; L[ i ] = L[ j ] ; L[ j ] = temp; i = i +1; j = j - 1; } } 回答を教えてください!できれば方法も! 初期値は横一列に並んでましたが、横にしたら文章がずれてしまうので、縦一列にしました。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- jjon-com
- ベストアンサー率61% (1599/2592)
http://okwave.jp/qa/q7596676.html 35,10,24,22,28,14,30,8 ……要素数8の配列。 i = 1; j = 8; ……iは配列の左端を指し,jは配列の右端を指している。 ●1段階目 while ( L[ i ] < sv ) i = i + 1; ……L[i] < 22 が成り立つ間,iを増やしていく。 ……言い換えれば,22以上の値を発見するまでiを右に移動させる。 ……1段階目では,L[1]=35 がいきなり22以上なので,i=1 while ( L[ j ] > sv ) j = j - 1; ……L[i] > 22 が成り立つ間,jを減らしていく。 ……言い換えれば,22以下の値を発見するまでjを左に移動させる。 ……1段階目では,L[8]=8 がいきなり22以下なので,j=8 if ( i <= j ) { temp = L[ i ] ; L[ i ] = L[ j ] ; L[ j ] = temp; ……L[1]とL[8]を交換する。 ……この時点で配列の内容は,8,10,24,22,28,14,30,35 i = i +1; j = j - 1; } ……iを増やしてi=2,jを減らしてj=7 ●2段階目 while ( L[ i ] < sv ) i = i + 1; ……i=2の位置から右に22以上の値を見つけにいく。 ……発見したのはL[3]=24 while ( L[ j ] > sv ) j = j - 1; ……j=7の位置から左に22以下の値を見つけにいく。 ……発見したのはL[6]=14 if ( i <= j ) { temp = L[ i ] ; L[ i ] = L[ j ] ; L[ j ] = temp; ……L[3]とL[6]を交換する。 ……この時点で配列の内容は,8,10,14,22,28,24,30,35 i = i +1; j = j - 1; } ……iを増やしてi=4,jを減らしてj=5 ●3段階目 while ( L[ i ] < sv ) i = i + 1; ……i=4の位置から右に22以上の値を見つけにいく。 ……発見したのはL[4]=22 while ( L[ j ] > sv ) j = j - 1; ……j=5の位置から左に22以下の値を見つけにいく。 ……発見したのはL[4]=22 if ( i <= j ) { temp = L[ i ] ; L[ i ] = L[ j ] ; L[ j ] = temp; ……L[4]とL[4]を交換する。同じ要素だけれど交換している。 ……この時点で配列の内容は,8,10,14,22,28,24,30,35 i = i +1; j = j - 1; } ……iを増やしてi=5,jを減らしてj=3 ●ループの終了 while ( i <= j ) ……i=5,j=3 なので 5≦3 は成り立たず,ループの終了。
補足
値は書き出してみたのですが、どうしてjが3になるのかさっぱりわかりません>< 教えてください!!お願いします!!