Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions FenwickTree.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#include <iostream>
#include <vector>

template <typename T>
class FenwickTree {
private:
int n;
std::vector<T> bit;
public:
FenwickTree(int n) {
this -> n = n;
bit = std::vector<T>(n+1);
}

void update(int x, T delta) {
for(; x <= n; x += x & -x) {
bit[x] += delta;
}
}

T query(int x) {
T res = 0;
for(; x > 0; x -= x & -x) {
res += bit[x];
}
return res;
}

T query_range(int l, int r) {
return query(r) - query(l-1);
}
};

int main() {
// creating FenwickTree object for index from 1 to 10 and type integers;
FenwickTree<int> ft(10);

//updates
ft.update(3, 5);
ft.update(4, 1);
ft.update(7, 2);

//query in range
std::cout << ft.query_range(3, 7) <<'\n';
std::cout << ft.query_range(4, 6) <<'\n';

return 0;
}
103 changes: 57 additions & 46 deletions Sorting Algos/countsort.cpp
Original file line number Diff line number Diff line change
@@ -1,51 +1,62 @@
#include<iostream>
#include<string>
#define n 200

#include<bits/stdc++.h>
using namespace std;
void countingSort(int *a,int n,int range)
{
int *freq=new int[range];
int *output=new int[n];
memset(freq,0,sizeof(freq[0])*range);
/*cout<<"Range of elements entered "<<range<<endl;
cout<<"\nFrequency Array Initially:\n";
for(int i=0;i<range;i++){
cout<<freq[i]<<" ";
}
cout<<"\n";*/
for(int i=0;i<n;i++){
freq[a[i]]++;
}
/*cout<<"\nFrequency Array :\n";
for(int i=0;i<range;i++){
cout<<freq[i]<<" ";
}
cout<<"\n";*/

void count_sort(int ch[],int num){
int arr[n];
int temp,i=0;
for(i=0;i<n;i++){
arr[i]=0;
}

for(i=0;i<num;i++){
temp=ch[i];
arr[temp]++;
}

for(i=1;i<n;i++){
arr[i]+=arr[i-1];
}
for(i=n-1;i>=0;i--){
arr[i]=arr[i-1];
}

int outputarr[num];
for(i=0;i<num;i++ ){
temp=ch[i];
outputarr[arr[temp]]=temp;
arr[temp]++;
}
for(i=0;i<num;i++){
ch[i]=outputarr[i];
}

for(int i=1;i<range;i++){
freq[i]+=freq[i-1];
}
/*cout<<"\nUPDATED Frequency Array :\n";
for(int i=0;i<range;i++){
cout<<freq[i]<<" ";
}
cout<<"\n";*/
for(int i=n-1;i>=0;i--){
freq[a[i]]--;
output[freq[a[i]]]=a[i];
}
for(int i=0;i<n;i++){
a[i]=output[i];
}
}
int main()
{
int n,s,e;
cout<<"Enter Range you want to Sort StartElement,EndElement\n";
cin>>s>>e;
n=abs(e-s+1);
int *a=new int[n];

int main(){
cout<<"Input format : Number of elements of array\n The elements\n";
int k,i=0;
scanf("%d",&k);
int a[k];
for(i=0;i<k;i++){
cin>>a[i];
}
count_sort(a,k);
for(i=0;i<k;i++){
cout<<a[i]<<" ";
}
return 0;
for(int i=0;i<n;i++){
cin>>a[i];
}
//cout<<"No of elements entered "<<n<<endl;
//cout<<"Range of elements entered "<<e<<endl;
cout<<"\nBefore Sorting :\n";
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
countingSort(a,n,e+1);
cout<<"\nAfter Sorting :\n";
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}