快速排序C++的实现

时间:2021-07-18 05:03:17

标签: c++ arrays algorithm sorting quicksort

我了解到快速排序是一种排序算法,它遵循分而治之的原则,平均时间复杂度为 n(log n),最坏时间复杂度为 n^2。

这里我选择了中间元素作为枢轴。

当它超过数组长度时,函数返回数组。

我使用了四个函数来实现归并排序:

快速排序功能

  • isSorted( ) 如果数组已排序,则返回 true。
  • pivotPositioning( ) 将枢轴安排在理想位置。
  • quickSort( ) //包装函数
  • quickSort() 返回已排序的数组

默认参数选择初始枢轴作为数组的中间元素。

它给出了一个错误,在排序完成后,对于偶数长度的数组(即 4,8,10),最后一个元素显示为 -2。我想知道是什么导致了错误?

//C++ Code
#include<iostream>

void print(int *, int);

bool isSorted(int *arr, int high, int low=0)
{
    for(int i=low; (i+1)<high; i++)
    {
        if(arr[i] > arr[i+1])
        {
            return false;
        }
    }
    return true;
}

void pivotPositioning(int *arr, int high, int low)
{
    for(int i=low; (i+1)<high; i++)
    {
        if(arr[i] > arr[i+1])
        {
            int temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
    }
}

void quickSort(int *arr, int length, int pivot) 
{
    pivotPositioning(arr, pivot+1, 0);
    //print(arr, length);
    pivotPositioning(arr, length, pivot);
    //print(arr, length);
}

int *quickSort(int *arr, int length)
{
    int pivot = length/2;

    quickSort(arr, length, pivot);

    if (isSorted(arr, length) == false)
    {
        while (pivot > 0)
        {
            pivot--;
            quickSort(arr, length, pivot);
        }   

        while (pivot<length)
        {
            pivot++;
            quickSort(arr, length, pivot);
        }
        
    }

    return arr;
}

int main()
{
    int length ;
    std::cout<<"Enter length of the array: ";
    std::cin>>length;

    int arr[length] ;
    for(int i=0; i<length; i++)
    {
        std::cout<<"Enter Element "<<(i+1)<<" : ";
        std::cin>>arr[i];
    }

    quickSort(arr, length);

    print(arr, length);

    return 0;
}

void print(int *arr, int length)
{
    std::cout<<"Sorted Array: ";
    for(int i=0; i<length; i++)
    {
        std::cout<<arr[i]<<" ";
    }
    std::cout<<"\n";
}

0 个答案:

没有答案
相关问题