递归快速排序过程的流程图?

时间:2013-12-18 20:51:17

标签: c++ algorithm sorting quicksort flowchart

我正在尝试为我的递归快速排序制作流程图。我到目前为止但不确定是否正确。

我试图在流程图中没有任何代码的简单流程图中显示详细信息。

这是我到目前为止所做的,但我不确定它是对的。我想要找到的是,快速排序如何以及何时知道它已被排序。然后我可以改变流程图中决策框中的文本以使其更有意义。

enter image description here

这是我的代码,如果有任何相关性,可以发表评论。

#include <iostream>
using namespace std;
//this variable is the size of the array (amount of numbers in sort)
int const SIZE = 5;                               


// This function swaps two numbers, arguments for these 2 numbers   
void swap(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

// This function prints an array, Arguments for the array to be printed and number of elements in array
void PrintArray(int* array, int n)
{
    int i;

    for( i = 0; i < n; i++) cout<<array[i]<<',';
}

// This function splits the array around the pivot
// Arguments; array to be split, pivot to be returned, first element and last element
int SplitArray(int* array, int pivot, int startIndex, int endIndex)
{
    int leftBoundary = startIndex;
    int rightBoundary = endIndex;
    //shuffle pivot until both the boundaries meet
    while(leftBoundary < rightBoundary)            
    {
        //keep moving until a lesser element is found or until the leftBoundary is reached
         while( pivot < array[rightBoundary]          
                && rightBoundary > leftBoundary)      
         {
             //shift left through the split section
              rightBoundary--;                      
         }
         swap(array[leftBoundary], array[rightBoundary]);
         //keep moving through the array until a greater or equal element is found or until the section end is reached
         while( pivot >= array[leftBoundary]          
                && leftBoundary < rightBoundary)     
         {
             //shift right through the split section
              leftBoundary++;                        
         }
         swap(array[rightBoundary], array[leftBoundary]);
    }
    //returns the split point of the array because the left and right boundary are equal
    return leftBoundary;                              
}

//This function quicksorts the data with arguments for array and its first and last element
void QuickSort(int* array, int startIndex, int endIndex)
{
    //set the pivot as the start of split array
    int pivot = array[startIndex];                  
    int splitPoint;
    //if they are equal then there is only one element and the sorting has finished
    if(endIndex > startIndex)                        
    {
        //gets the position of the pivot and sets data in that position to pivot variable
        splitPoint = SplitArray(array, pivot, startIndex, endIndex);
        array[splitPoint] = pivot;
        //**RECURSION - Quick sort first half of the array (left of pivot point)
        QuickSort(array, startIndex, splitPoint-1);  
        //**RECURSION - Quick sort second half of the array (right of pivot point)
        QuickSort(array, splitPoint+1, endIndex);    
    }
}
//beggining of main program, makes use of the functions declared before this
int main()
{
    int array[SIZE];
    //input unsorted array elements
    cout << "This program demonstrates a quick sort using a recursive algorithm" << endl;
    for(int i = 0; i < SIZE; i++)
    {
         cout<<"Enter an integer : ";
         cin>>array[i];
    }
    //output the unsorted list
    cout<<endl<<"The list you input is : "<<endl;
    PrintArray(array, SIZE);
    //sort array from first to last element and output the sorted list
    QuickSort(array,0,SIZE - 1);
    cout<<endl<<"The list has been sorted, now it is : "<<endl;
    PrintArray(array,SIZE);
    //refresh the input stream and 
    cin.sync();
    cin.get();
}

0 个答案:

没有答案