(1150983986さん)
バブルソートの推移は写真とは違うけど...
例:
#include <stdio.h>
#define N 6
void copy(int *a, int *b, int n) {
int i;
for(i=0; i<n; i++)
a[i]=b[i];
}
void pd(int *a, int n) {
int i;
for(i=0; i<n; i++)
printf("%3d", a[i]);
putchar('\n');
}
void swap(int* a, int* b) {
int t;
t = *a;
*a = *b;
*b = t;
}
void selectionsort(int *a, int n) {
int min,ix;
int i, j, c=1;
for( i = 0; i<n-1 ; i++, c++ ) {
min = a[i];
ix = i;
for (j = i+1; j<n ; j++ ) {
if ( a[j]<min ) {
min = a[j];
ix = j;
}
}
swap(&a[ix], &a[i]);
printf("loop- %d: ", c);
pd(a, n);
}
}
void insertionsort(int *a, int n) {
int x;
int i, j;
for( i = 1; i < n; i += 1 ) {
x = a[i];
j = i;
while( ( a[j-1]>a[j] ) && ( 0 < j ) ) {
swap(&a[j-1], &a[j]);
j = j-1;
}
printf("loop- %d: ", i);
pd(a, n);
}
}
void bubblesort(int *a, int n) {
int i, j, t;
for(i=0; i<(n-1); i++) {
for(j=(i+1); j<n; j++) {
if(a[i]>a[j]) {
swap(&a[i],&a[j]);
}
}
printf("loop- %d: ", i+1);
pd(a, n);
}
}
int main(void) {
int a0[N]= {27, 31, 15, 7, 11, 9};
int a[N+1];
printf("data: ");
pd(a0, N);
printf("selection sort\n");
copy(a, a0, N);
selectionsort(a, N);
printf("insertion sort\n");
copy(a, a0, N);
insertionsort(a, N);
printf("bubble sort\n");
copy(a, a0, N);
bubblesort(a, N);
printf("\n");
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~
data: 27 31 15 7 11 9
selection sort
loop- 1: 7 31 15 27 11 9
loop- 2: 7 9 15 27 11 31
loop- 3: 7 9 11 27 15 31
loop- 4: 7 9 11 15 27 31
loop- 5: 7 9 11 15 27 31
insertion sort
loop- 1: 27 31 15 7 11 9
loop- 2: 15 27 31 7 11 9
loop- 3: 7 15 27 31 11 9
loop- 4: 7 11 15 27 31 9
loop- 5: 7 9 11 15 27 31
bubble sort
loop- 1: 7 31 27 15 11 9
loop- 2: 7 9 31 27 15 11
loop- 3: 7 9 11 31 27 15
loop- 4: 7 9 11 15 31 27
loop- 5: 7 9 11 15 27 31