前提・実現したいこと
挿入ソートを実装したいです。表示させてない方が僕の書いたinsertionで、
上のinsertionとは違い、jだけでなくiもjと同様にインクリメントさせると
while(j>0)を抜けてくれません。whileのすぐ後のprintfではjは0と表示
されるのですが、どうして抜けてくれないのでしょうか。
発生している問題・エラーメッセージ
jが0のままで、forループが次の周に進まない (iが加算されず、よってjも加算されず、ということです)
該当のソースコード
c
1#include<stdio.h> 2#define NUM 5 3 4void insertionSort(int *p); 5 6int main(void) 7{ 8 int i=0; 9 int data[NUM] = {5, 3, 1, 2, 4}; 10 11 insertionSort(data); 12 13 for(i=0; i<NUM; i++){ 14 printf("%d ", data[i]); 15 } 16 17 return 0; 18} 19 20void insertionSort(int *p) 21{ 22 int i,j; 23 int buffer = 0; 24 25 for(i=0; i<NUM-1; i++){ 26 j=i+1; 27 while(j>0){ 28 if(p[j-1]>p[j]){ 29 buffer = p[j-1]; 30 p[j-1] = p[j]; 31 p[j] = buffer; 32 } 33 j--; 34 } 35 } 36 37 return ; 38} 39 40/*こっちが、僕の考えたほうです 41void insertionSort(int *p) 42{ 43 int i,j; 44 int buffer = 0; 45 46 for(i=0; i<NUM-1; i++){ 47 j=i+1; 48 while(j>0){ 49 if(p[i]>p[j]){ 50 buffer = p[i]; 51 p[i] = p[j]; 52 p[j] = buffer; 53 } 54 i--; 55 j--; 56 } 57 printf("j:%d\n", j); 58 } 59 60 return ; 61 } 62*/ 63
試したこと
j,j-1にして判定を行う(これがうまくいくことはしっています)
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/29 11:51