how to implement quick sort algorithm in C++

前端 未结 4 1492
故里飘歌
故里飘歌 2021-02-06 12:28

here is the of quick sort algorithm from the MITOcw(Introduction To Algorithms ) lecture

QUICKSORT(A,p,q)
if(p < q)
then r = PARTITION(A,p,q)
     QUICKSORT         


        
4条回答
  •  失恋的感觉
    2021-02-06 12:51

    Since I see various answers, you could try this:

    #include 
    
    void quickSort(int a[], int first, int last);
    int pivot(int a[], int first, int last);
    void swap(int& a, int& b);
    void swapNoTemp(int& a, int& b);
    void print(int array[], const int& N);
    
    using namespace std;
    
    int main()
    {
        int test[] = { 7, -13, 1, 3, 10, 5, 2, 4 };
        int N = sizeof(test)/sizeof(int);
    
        cout << "Size of test array :"  << N << endl;
    
        cout << "Before sorting : " << endl;
        print(test, N);
    
        quickSort(test, 0, N-1);
    
        cout << endl << endl << "After sorting : " << endl;
        print(test, N);
    
        return 0;
    }
    
    /**
     * Quicksort.
     * @param a - The array to be sorted.
     * @param first - The start of the sequence to be sorted.
     * @param last - The end of the sequence to be sorted.
    */
    void quickSort( int a[], int first, int last ) 
    {
        int pivotElement;
    
        if(first < last)
        {
            pivotElement = pivot(a, first, last);
            quickSort(a, first, pivotElement-1);
            quickSort(a, pivotElement+1, last);
        }
    }
    
    /**
     * Find and return the index of pivot element.
     * @param a - The array.
     * @param first - The start of the sequence.
     * @param last - The end of the sequence.
     * @return - the pivot element
    */
    int pivot(int a[], int first, int last) 
    {
        int  p = first;
        int pivotElement = a[first];
    
        for(int i = first+1 ; i <= last ; i++)
        {
            /* If you want to sort the list in the other order, change "<=" to ">" */
            if(a[i] <= pivotElement)
            {
                p++;
                swap(a[i], a[p]);
            }
        }
    
        swap(a[p], a[first]);
    
        return p;
    }
    

    I have it in Quicksort (C++).

提交回复
热议问题