Po dlouhé době zápasení a přepisování sem ze sebe vyprodukoval takovýto quicksort:
#include <iostream>
#include <ctime>
using namespace std;
void Swap(int& a,int& b){
int temp;
temp=a;
a=b;
b=a;}
void QuickSort(int array[],int left,int right)
{
int start=left;
int end=right;
int part;
int pivot=(array[(left+right)/2]);
cout<<left<<" "<<right<<endl;
cin.get();
while(right>left)
{
while(right>left)
{
if(array[right]>=pivot)right--;
else break;
}
while(right>left)
{
if(array[left]<pivot)left++;
else break;
}
cin.get();
swap(array[left],array[right]);
cout<<pivot<<endl;
cout<<left<<" "<<right<<endl;
cout<<array[right]<<" "<<array[left]<<endl;
QuickSort(array,left+1,end);
QuickSort(array,start,left);
for(int n=0;n<10;n++)
{
cout<<array[n];}
cout<<endl;
}
}
int main()
{
int nmb[10]={9,8,7,1,1,1,1,3,2,4};
// int nmb[10]={1,5,2,6,7,3,2,1,2,3};
// int nmb[10]={1,2,3,4,5,6,7,8,9,10};
// int nmb[10];
// srand((unsigned)time(0));
// for(int a=0;a<10;a++){
// nmb[a] = rand();
// cout<<nmb[a]<<" ";}
cout<<endl;
QuickSort(nmb,0,9);
for(int n=0;n<10;n++)
{
cout<<nmb[n]<<" ";
}
cin.get();
return 0;
}
Jaká je prosím složitost tohoto algoritmu? Vím, že quicksort by měl být n*log(n), ale obávám se, že sem někde přidal podmínku navíc a nyní je to n*(log(n))^2. A ještě k tomu když to spočítám (možná to počítám špatně), tak mi to vyjde jako n^2 log(n)/2 + log(n)/2. Mohl by mi prosím někdo poradit jakou má toto tedy složitost a příp. jak se k tomu dospěje?
Děkuji