diff --git a/Data Structure Algo/C++/bfs.cpp b/Data Structure Algo/C++/bfs.cpp index 1104c744..b711b278 100644 --- a/Data Structure Algo/C++/bfs.cpp +++ b/Data Structure Algo/C++/bfs.cpp @@ -1,92 +1,78 @@ #include #include - using namespace std; - -// This class represents a directed graph using -// adjacency list representation + class Graph { - int V; // No. of vertices - - // Pointer to an array containing adjacency - // lists - list *adj; + int V; + list *adj; public: - Graph(int V); // Constructor - - // function to add an edge to graph - void addEdge(int v, int w); - - // prints BFS traversal from a given source s - void BFS(int s); + Graph(int V); + void addEdge(int v, int w); + void BFS(int s); }; - + Graph::Graph(int V) { - this->V = V; - adj = new list[V]; + this->V = V; + adj = new list[V]; } - + void Graph::addEdge(int v, int w) { - adj[v].push_back(w); // Add w to v’s list. + adj[v].push_back(w); } - + void Graph::BFS(int s) { - // Mark all the vertices as not visited - bool *visited = new bool[V]; - for(int i = 0; i < V; i++) - visited[i] = false; - - // Create a queue for BFS - list queue; - - // Mark the current node as visited and enqueue it - visited[s] = true; - queue.push_back(s); - - // 'i' will be used to get all adjacent - // vertices of a vertex - list::iterator i; - - while(!queue.empty()) - { - // Dequeue a vertex from queue and print it - s = queue.front(); - cout << s << " "; - queue.pop_front(); - - // Get all adjacent vertices of the dequeued - // vertex s. If a adjacent has not been visited, - // then mark it visited and enqueue it - for (i = adj[s].begin(); i != adj[s].end(); ++i) - { - if (!visited[*i]) - { - visited[*i] = true; - queue.push_back(*i); - } - } - } + + bool *visited = new bool[V]; + for(int i = 0; i < V; i++) + visited[i] = false; + + + list queue; + + + visited[s] = true; + queue.push_back(s); + + + list::iterator i; + + while(!queue.empty()) + { + + s = queue.front(); + cout << s << " "; + queue.pop_front(); + + + for (i = adj[s].begin(); i != adj[s].end(); ++i) + { + if (!visited[*i]) + { + visited[*i] = true; + queue.push_back(*i); + } + } + } } - -// Driver program to test methods of graph class + int main() { - // Create a graph given in the above diagram - Graph g(4); - g.addEdge(0, 1); - g.addEdge(0, 2); - g.addEdge(1, 2); - g.addEdge(2, 0); - g.addEdge(2, 3); - g.addEdge(3, 3); - - cout << "Following is Breadth First Traversal " - << "(starting from vertex 2) \n"; - g.BFS(2); - - return 0; + + Graph g(4); + g.addEdge(0, 1); + g.addEdge(0, 2); + g.addEdge(1, 2); + g.addEdge(2, 0); + g.addEdge(2, 3); + g.addEdge(3, 3); + + cout << "Following is Breadth First Traversal " + << "(starting from vertex 2) \n"; + g.BFS(2); + + return 0; } diff --git a/Data Structure Algo/Python/Quick sort.py b/Data Structure Algo/Python/Quick sort.py new file mode 100644 index 00000000..a30c648f --- /dev/null +++ b/Data Structure Algo/Python/Quick sort.py @@ -0,0 +1,34 @@ + +# Solution +def quicksort(array,left,right): + ln = len(array) + if left < right: + pivot = right + partitionindex = partition(array, pivot, left, right) + + quicksort(array, left, partitionindex -1) + quicksort(array, partitionindex +1, right) + return array + +def partition(array, pivot, left, right): + pivotvalue = array[pivot] + partitionindex = left + + for i in range(left,right): + if array[i] < pivotvalue: + swap(array, i, partitionindex) + partitionindex += 1 + + swap(array, right, partitionindex) + return partitionindex + +def swap(array, firstindex, secondindex): + temp = array[firstindex] + array[firstindex] = array[secondindex] + array[secondindex] = temp + + +numbers = [99, 44, 6, 2, 1, 5, 63, 87, 283, 4, 0] + +# Select first and last index as 2nd and 3rd parameters +print(quicksort(numbers,0,len(numbers)-1)) \ No newline at end of file