我了解到快速排序是一种排序算法,它遵循分而治之的原则,平均时间复杂度为 n(log n),最坏时间复杂度为 n^2。
这里我选择了中间元素作为枢轴。
当它超过数组长度时,函数返回数组。
我使用了四个函数来实现归并排序:
快速排序功能
默认参数选择初始枢轴作为数组的中间元素。
它给出了一个错误,在排序完成后,对于偶数长度的数组(即 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";
}