Quicksort Program

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

#include<bits/stdc++.

h>

#include <chrono>

#include <fstream>

#include <cstdlib>

#include <ctime>

using namespace std;

using namespace chrono;

int genRandomInt(int LowerLimit, int UpperLimit){

int temp = LowerLimit + rand()%(UpperLimit-LowerLimit);

return temp;

void tGenerator(string testCases_file,int size)

ofstream outputFile(testCases_file); int

temp; for (int i=0;i<size;i++)

temp = genRandomInt(0,100000);

outputFile << temp << " ";

outputFile.close();

vector<int> readVectorFromFile(string filename){

vector<int>v;

ifstream inputFile(filename);

int num;

while (inputFile >> num)

v.push_back(num);
Rachit Thakur
22001001084
}

inputFile.close();

return v;

int partitionU(vector<int>&arr,int low,int high,int ch){

int pivot,mid,pivotI;

if(ch==1){

pivot = arr[low];

pivotI =low;

else if(ch==2){

int mid = (low+high)/2;

pivot = arr[mid];

pivotI = mid;

else if(ch==3){

pivot = arr[high];

pivotI = high;

else {

pivotI = genRandomInt(low,high);

pivot = arr[pivotI];

int cnt =0;

for(int i=low;i<=high; i++){

if(arr[i]<pivot){

cnt++;

}
Rachit Thakur
22001001084
}

int Cpivot_index = low+cnt;

swap(arr[pivotI],arr[Cpivot_index]);

int i=low; int j=high;

while(i<Cpivot_index && j>Cpivot_index )

{ while(arr[i]<pivot){

i++;

while(arr[j]>=pivot){

j--;

if(i<Cpivot_index && j>Cpivot_index)

{ swap(arr[i++],arr[j--]);

return Cpivot_index;

void quickSort(vector<int>&arr, int low, int high,int ch){

if(low >= high) {

return ;

int pos = partitionU(arr, low,

high,ch); quickSort(arr, low, pos-

1,ch);

quickSort(arr, pos+1, high,ch);

Rachit Thakur
22001001084
int measureTime(vector<int>&arr1,int ch,int size)

{ string a;

auto start =

high_resolution_clock::now(); if(ch==1){

quickSort(arr1,0,arr1.size()-1,ch);

a = "First Element";

else if(ch ==2){

quickSort(arr1,0,arr1.size()-1,ch);

a = "Middle Element";

else if(ch ==3){

quickSort(arr1,0,arr1.size()-1,ch);

rra="Last Element";

else {

quickSort(arr1,0,arr1.size()-1,ch);

a = "Random Element";

auto stop = high_resolution_clock::now();

auto duration = duration_cast<microseconds>(stop - start);

int ans = duration.count();

return ans;

// This funtion finds the time generated to sort an arr of n size for all the pivots

void writeReadMeasure(int size,vector<int>&v,vector<int>&tStamps,string filename){

tGenerator(filename,size);

v = readVectorFromFile(filename);
Rachit Thakur
22001001084
int t1=measureTime(v,1,size);

v = readVectorFromFile(filename);

int t2 =measureTime(v,2,size);

v = readVectorFromFile(filename);

int t3 = measureTime(v,3,size);

v = readVectorFromFile(filename);

int t4=measureTime(v,4,size);

tStamps.push_back(t1);tStamps.push_back(t2);

tStamps.push_back(t3);tStamps.push_back(t4);

int main()

srand(time(0));

vector<int>TempS;

int i=0;

while(i<5){

vector<int> v1,v2,v3,v4,v5,v6;

int size = 10;

writeReadMeasure(size,v1,TempS,"testcases1.txt");

size = 100;

writeReadMeasure(size,v2,TempS,"testcases2.txt");

size = 500;

writeReadMeasure(size,v3,TempS,"testcases3.txt");

size = 1000;

writeReadMeasure(size,v4,TempS,"testcases4.txt");

size = 5000;
Rachit Thakur
22001001084
writeReadMeasure(size,v5,TempS,"testcases5.txt");

size = 10000;

writeReadMeasure(size,v6,TempS,"testcases6.txt"); i+

+;

vector<int>avgEntries;int temp=0,k=0;

for(int i=0;i<24;i++){

k=i;

for(int j=0;j<5;j++){

temp+=TempS[k];

k+=24;

avgEntries.push_back(temp/5);

temp=0;

vector<vector<int>>avgM(6,vector<int>(4,0));

k=0;

for(int i=0;i<6;i++){

for(int j=0;j<4;j++){

avgM[i][j]=avgEntries[k++];

cout<<"First Last Middle Random \n";

for(int i=0;i<6;i++){

for(int j=0;j<4;j++){

cout<<avgM[i][j];

if(i==1 || i==2){

int t = 8;
Rachit Thakur
22001001084
while(t--){

cout<<" ";

else if(i==0){

int t = 9;

while(t--){

cout<<" ";

else if(i==3){

int t = 7;

while(t--){

cout<<" ";

else{

int t = 6;

while(t--){

cout<<" ";

cout<<endl;

Rachit Thakur
22001001084
Rachit Thakur
22001001084

You might also like