This will determine if a string is unique or not using quicksort, so that it should take \$O(nlogn)\$ time and not \$O(n^2)\$ time.
I will call the test
function code from main
.
This runs successfully, but when I try to write a randomized partition, it will fail. I have written that code separately.
FindUniqueCharInString.h
#define MAX 15
class FindUniqueCharInString
{
public:
FindUniqueCharInString(void);
~FindUniqueCharInString(void);
void test();
private:
void swap(int index1, int index2);
void quickSort(int start, int end);
int partition(int start, int end);
char arr[15];
};
FindUniqueCharInString.cpp
#include "FindUniqueCharInString.h"
#include <iostream>
using std::cout;
using std::endl;
FindUniqueCharInString::FindUniqueCharInString(void)
{
char *tempArr = "SOMESTRING";
strcpy(arr,tempArr);
}
FindUniqueCharInString::~FindUniqueCharInString(void)
{
}
void FindUniqueCharInString::test()
{
quickSort(0,strlen(arr));
for(int i = 0;i<strlen(arr);i++)
{
cout<<arr[i] << " ";
}
cout<<endl;
bool isUnique = true;
for(int i = 0;i<strlen(arr) - 1;i++)
{
if(arr[i] == arr[i+1])
isUnique = false;
}
if(isUnique)
cout<<"Unique" <<endl;
else
cout<<"Not unique"<<endl;
}
void FindUniqueCharInString::swap(int index1, int index2)
{
if(arr[index1] != arr[index2])
{
char temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
}
void FindUniqueCharInString::quickSort(int start, int end)
{
if(start >= end)
return;
int p = partition(start,end);
quickSort(start, p - 1);
quickSort(p + 1,end);
}
int FindUniqueCharInString::partition(int start, int end)
{
int pivot = arr[end - 1];
int t = start;
for(int i = start; i< end-1; i++)
{
if(arr[i] <= pivot)
{
swap(i,t);
t++;
}
}
swap(t,end - 1); //swap index and pivot pos
return t;
}
Randomize partition function:
int FindUniqueCharInString::partition(int start, int end)
{
int m = start + (end - start)/2;
int pivot = arr[m];
int t = start;
swap(m,end -1); //putting pivot element to end
for(int i = start; i< end-1; i++)
{
if(arr[i] <= pivot)
{
swap(i,t);
t++;
}
}
swap(t,end - 1); //swap index and pivot pos
return t;
}