Fungsi bubbleSort berguna untuk mengurutkan array. Memanggil fungsi swap untuk menukarkan elemen array dari
array[j] dan array[j+1]. Ingat bahwa program C akan memaksa untuk
menyembunyikan informasi diantara
fungsi, agar array tidak bisa mengakses elemen individu di fungsi bubbleSort.
bubbleSort
menggunakan
alamat operator(&) di setiap elemen array yang di panggil swap.
swap( &array[ j ], &array[ j + 1 ]
);
Fungsi swap menerima array[j] di
variable pointer element1Ptr. Meskipun
swap tidak boleh mengetahui nama array[j], swap boleh menggunakan *element1Ptr sebagai ganti array[j].
Meskipun swap tidak diijinkan untuk menuliskan :
hold = array[ j ];
array[ j ] = array[ j + 1 ];
array[ j + 1 ] = hold;
tetapi bisa digantikan :
int hold = *element1Ptr;
*element1Ptr = *element2Ptr;
*element2Ptr = hold;
Contoh program:
1 /* Fig. 7.15: fig07_15.c
2 This program puts values into an
array, sorts the values into
3 ascending order, and prints the
resulting array. */
4 #include <stdio.h>
5 #define SIZE 10
6
7 void bubbleSort( int * const
array, const int size ); /* prototype */
8
9 int main( void )
10 {
11 /* initialize array a */
12 int a[ SIZE ] = { 2, 6, 4, 8,
10, 12, 89, 68, 45, 37 };
13
14 int i; /* counter */
15
16 printf( "Data items in
original order\n" );
17
18 /* loop through array a */
19 for ( i = 0; i < SIZE; i++ )
{
20 printf( "%4d", a[ i ]
);
21 } /* end for */
22
23 bubbleSort( a, SIZE ); /* sort
the array */
24
25 printf( "\nData items in
ascending order\n" );
26
27 /* loop through array a */
28 for ( i = 0; i < SIZE; i++ )
{
29 printf( "%4d", a[ i ]
);
30 } /* end for */
31
32 printf( "\n" );
33 return 0; /* indicates
successful termination */
34 } /* end main */
35
36 /* sort an array of integers
using bubble sort algorithm */
37 void bubbleSort( int * const
array, const int size )
38 {
39 void swap( int *element1Ptr, int
*element2Ptr ); /* prototype */
40 int pass; /* pass counter */
41 int j; /* comparison counter */
42
43 /* loop to control passes */
44 for ( pass = 0; pass < size -
1; pass++ ) {
45
46 /* loop to control comparisons
during each pass */
47 for ( j = 0; j < size - 1;
j++ ) {
48
49 /* swap adjacent elements if
they are out of order */
50 if ( array[ j ] > array[ j +
1 ] ) {
51 swap( &array[ j ],
&array[ j + 1 ] );
52 } /* end if */
53 } /* end inner for */
54 } /* end outer for */
55 } /* end function bubbleSort */
/* swap values at memory locations
to which element1Ptr and
element2Ptr point */
void swap( int *element1Ptr, int
*element2Ptr )
{
int hold = *element1Ptr;
*element1Ptr = *element2Ptr;
*element2Ptr = hold;
} /* end function swap */
Output:
0 komentar:
Posting Komentar