Image Loading... Image Loading...
Click Here to Visit Our Sponsor

Home
News
Cartoon

Books
Reviews

SimTel
Compress
Database
Delphi
Desktop
Diskutl
Fileutl
Graphics
Inet
Mmedia
Prog
Scrsave
Util

C/C++
CodeBase!
Libraries
Tutorials
WebLinks

Pascal
Libraries
WebLinks



Home / C Tutorials
The C language
Arrays and the Bubble Sort
by Marshall Brain
Thursday, May 27, 1999

Published with kind permission of DevCentral
Copyright © 1998 Interface Technologies, Inc. All Rights Reserved.


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()   
 { 
     rand_seed = rand_seed * 1103515245 +12345;    
     return (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[10]; 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[10]; 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 rand_seed=10 also declares a global variable, this time named rand_seed. 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();.


This Article
Introduction
A simple program
Branching/looping
Arrays
C Details
Functions
Libraries/makefiles
Text files
Pointers
Parameters
Dynamic structures
Pointers and arrays
Strings
Operator precedence
The command line
Binary files

NetLinks
DevCentral
DJGPP C Compiler
GNU C++ Compiler
Tendra C Compiler

Next:  C Details

   
Image Loading...