Senin, 12 Mei 2014

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