by BehindJava

# What are Arrays and the Bubble Sort in C Language

Home » cse » What are Arrays and the Bubble Sort in C Language

# Arrays and the Bubble Sort

In this section, you will create a small program that generates 10 random numbers and sorts them.

Start an editor and enter the following code:

``````#include <stdio.h>

#define MAX 10

int a[MAX];
int rand_seed=10;

int rand() /* from K&R - returns random number between 0 and 32767.*/
{
rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;
}

void main()
{
int i,t,x,y;

/* fill array */
for (i=0; i < MAX; i++)
{
a[i]=rand();
printf("%d\n",a[i]);
}

/* more stuff will go here in a minute */
} ``````

This code contains several new concepts, although the lines #include and #define should be familiar to you. The line int a[MAX]; shows you how to declare an array of integers in C. As an example, the declaration int a; is declared like this in Pascal:

``a:array [0..9] of integer; ``

All arrays start at index zero and go to n-1 in C. Thus, int a; contains 10 elements, and the largest valid index is 9. Unlike Pascal, C offers no way to change the range of index values. Also note that because of the position of the array a , it is global to the entire program.

The line int randseed=10 also declares a global variable, this time named randseed. that is initialized to 10 each time the program begins. This value is the starting seed for the random number code that follows. In a real random number generator, the seed should initialize as a random value, such as the system time. Here, the rand function will produce the same values each time you run the program.

The line int rand() is a function declaration. The equivalent function declaration looks like this in Pascal:

``function rand:integer;``

The rand function accepts no parameters and returns an integer value.

The four lines that follow implement the rand function. We will ignore them for now.

The main function is normal. Four local integers are declared, and the array is filled with 10 random values using a for loop. Note that arrays are indexed exactly as they are in Pascal.

Now add the following code in place of the more stuff … comment:

``````/* bubble sort the array */
for (x=0; x < MAX-1; x++)
for (y=0; y < MAX-x-1; y++)
if (a[y] > a[y+1])
{
t=a[y];
a[y]=a[y+1];
a[y+1]=t;
}
/* print sorted array */
printf("--------------------\n");
for (i=0; i < MAX; i++)
printf("%d\n",a[i]);``````

This code sorts the random values and prints them in sorted order.

Exercises

1. In the first piece of code, try changing the for loop that fills the array to a single line of code. Make sure that the result is the same as the original code.
2. Take the bubble sort code out and put it into its own function. (See tutorial 6, if necessary.) The function header will be void bubble_sort. Then move the variables used by the bubble sort to the function as well and make them local there. Because the array is global, you do not need to pass parameters.
3. Initialize the random number seed to different values.

C Errors to avoid

1. C has no range checking, so if you index past the end of the array, it will not tell you about it. It will eventually crash or give you garbage data.
2. A function call must include (even if no parameters are passed. For example, C will accept x=rand;, but the call will not work. The memory address of the rand function will be placed into x. You must say x=rand();