前田稔(Maeda Minoru)の超初心者のプログラム入門
5 2 5 3 1 4 |
void sort(int t[], int n); |
t[] | 整数データが格納された配列 |
n | 配列に格納されているデータ件数 |
2 5 3 1 4 |
2 5 3 1 4 | 関数に渡された最初の状態 |
1 5 3 2 4 | 0 番目に一番小さい数が格納される |
1 2 5 3 4 | 1 番目に次に小さい数が格納される |
1 2 3 5 4 | 2 番目にその次に小さい数が格納される |
1 2 3 4 5 | 3 番目にその次に小さい数が格納される |
void sort(int t[], int n) { int i,j,w; for(i=0; i<n-1; i++) for(j=i+1; j<n; j++) if (t[i]>t[j]) { w= t[i]; t[i]= t[j]; t[j]= w; } } |
5 4 3 2 1 |
5 4 3 2 1 | 関数に渡された最初の状態 |
4 3 2 1 5 | 4 番目に一番大きな数が格納される |
3 2 1 4 5 | 3 番目に次に大きな数が格納される |
2 1 3 4 5 | 2 番目にその次に大きな数が格納される |
1 2 3 4 5 | 1 番目にその次に大きな数が格納される |
void sort(int t[], int n) { int i,j,w; for(i=n-1; i>0; i--) for(j=0; j<i; j++) if (t[j]>t[j+1]) { w= t[j]; t[j]= t[j+1]; t[j+1]= w; } } |
5 1 2 3 4 |
5 1 2 3 4 | 関数に渡された最初の状態 |
1 2 3 4 5 | 4 番目に一番大きな数が格納される |
1 2 3 4 5 | 入れ替えが無くなったので終了する |
void sort(int t[], int n) { int i,j,w; w= 1; for(i=n-1; w!=0; i--) for(w=j=0; j<i; j++) if (t[j]>t[j+1]) { w= t[j]; t[j]= t[j+1]; t[j+1]= w; } } |
10 2 3 4 5 6 7 8 9 1 |
10 2 3 4 5 6 7 8 9 1 | 関数に渡された最初の状態 |
2 3 4 5 6 7 8 9 1 10 | 9 番目に一番大きな数が格納される |
1 2 3 4 5 6 7 8 9 10 | 0 番目に一番小さな数が格納される |
1 2 3 4 5 6 7 8 9 10 | 入れ替えが無くなったので終了する |
void sort(int t[], int n) { int i,j,w; w= 1; for(i=0; w!=0; i++) { for(w=j=0; j<n-1-i; j++) if (t[j]>t[j+1]) { w= t[j]; t[j]= t[j+1]; t[j+1]= w; } if (w==0) break; for(w=0,j=n-2-i; j>=0; j--) if (t[j]>t[j+1]) { w= t[j]; t[j]= t[j+1]; t[j+1]= w; } } } |
1 5 2 4 3 |
1 | 0 番目に一番小さな数が格納される |
1 2 | 1 番目に次に小さな数が格納される |
1 2 3 | 2 番目にその次に小さな数が格納される |
1 2 3 4 | 3 番目にその次に小さな数が格納される |
1 2 3 4 5 | 4 番目にその次に小さな数が格納される |
void sort(int t[], int n) { int i,j,w,p; for(i=0; i<n; i++) tw[i]= t[i]; for(i=0; i<n; i++) { w= tw[0]; p= 0; for(j=1; j<n; j++) if (w>tw[j]) { w= tw[j]; p= j; } t[i]= w; tw[p]= 30000; } } |
1 5 2 4 3 |
1 | 0 番目に一番小さな数が格納される |
1 2 | 1 番目に次に小さな数が格納される |
1 2 3 | 2 番目にその次に小さな数が格納される |
1 2 3 4 | 3 番目にその次に小さな数が格納される |
1 2 3 4 5 | 4 番目にその次に小さな数が格納される |
void sort(int t[], int n) { int i,j,p; for(i=0; i<n; i++) tw[i]= t[i]; for(i=0; i<n; i++) { for(p=0,j=1; j<n; j++) if (tw[p]>tw[j]) p= j; t[i]= tw[p]; tw[p]= 30000; } } |
1 5 2 4 3 |
1 | 0 番目に一番目に取り出した数が格納される |
1 5 | 1 番目に二番目に取り出した数が格納される |
1 2 5 | 1 番目に三番目に取り出した数が挿入される |
1 2 4 5 | 2 番目に四番目に取り出した数が挿入される |
1 2 3 4 5 | 2 番目に五番目に取り出した数が挿入される |
void sort(int t[], int n) { int i,j,p; for(i=0; i<n; i++) tw[i]= t[i]; for(i=0; i<n; i++) { for(p=0; p<i && tw[i]>t[p]; p++); for(j=i; j>p; j--) t[j]= t[j-1]; t[p]= tw[i]; } } |
void sort(int t[], int n) { int i,j,w; int p[MAX]; for(i=0; i<n; i++) { tw[i]= t[i]; p[i]= i; } for(i=0; i<n-1; i++) for(j=i+1; j<n; j++) if (t[p[i]]>t[p[j]]) { w= p[i]; p[i]= p[j]; p[j]= w; } for(i=0; i<n; i++) t[i]= tw[p[i]]; } |