Quicksort

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Sendell
    New Member
    • Sep 2006
    • 2

    Quicksort

    Sorry that this is such a trivial question...

    For an assignment I had to write the quicksort program:
    Code:
     //This program sorts a set of integers using the quicksort method.
    
    
    #include "stdafx.h"
    #include "genlib.h"
    #include "simpio.h"
    #include <stdio.h>
    
    #define size 7
    
    void getArray(int arr[size]);
    void quicksort(int arr[size], int beg, int end);
    int partition(int arr[size], int beg, int end);
    void dispArray(int arr[size]);
    void swap(int arr[], int i, int j);
    
    main()
    {
    	int arr[size], beg, end;
    
    	getArray(arr);
    	end = size - 1;
    	beg = 0;
    	quicksort(arr, beg, end);
    
    
    }
    
    void getArray(int arr[])
    {
    	int i;
    	for (i=0; i <= size - 1; i++)
    		{
    			printf("\nEnter next integer: ");
    			arr[i]=GetInteger();
    		}
    	dispArray(arr);
    }
    void dispArray(int arr[]){
    
    	int i;
    
    	printf("\n");
    
    	for (i=0; i <= size - 1; i++)
    			{
    				printf("%d ", arr[i]);
    			}
    			printf("\n");
    
    }
    void quicksort(int arr[], int beg, int end)
    {
    
         int middle;
    	 if(beg >= end) dispArray(arr);
    	 else{
          middle = partition(arr, beg, end);
          quicksort(arr, beg, middle - 1);   
          quicksort(arr, middle + 1, end);   
    	 }
    	  
    
    
    }
    
    
    
    int partition(int arr[], int beg, int end) {
    
    int j;
    int pivot;
    int i;
    
    pivot = beg;
    j = beg;
    
    for(i=beg+1;i<=end;i++)
    {
    if (arr[i] < arr[pivot])
    {
    j++;
    swap(arr, j, i);
    }
    }
    
    swap(arr, j, beg);
    return(j);
    }
    
    void swap(int arr[], int i, int j) {
    int t = arr[i];
    arr[i] = arr[j]; 
    arr[j] = t;
    }
    However, this prints the array each step of the process. How do I change my code to only display the array once it is sorted?

    Thanks.
  • D_C
    Contributor
    • Jun 2006
    • 293

    #2
    Take all print statements out of any function. Make a separate function to print the array. Then, change main to something like:
    Code:
    int main(/* args */)
    {
      array = getArray();
      printArray(&array);
      quicksortArray(&array);
      printArray(&array);
    
      return EXIT_SUCCESS;
    }
    That way, you input the array, print it, sort it, then print it again.

    Comment

    • Sendell
      New Member
      • Sep 2006
      • 2

      #3
      Ahh, perfect. Thanks!

      Comment

      Working...