diff --git a/c/cocktail_sort.cpp b/c/cocktail_sort.cpp new file mode 100644 index 0000000..b85dfd5 --- /dev/null +++ b/c/cocktail_sort.cpp @@ -0,0 +1,75 @@ +// C++ implementation of Cocktail Sort +#include +using namespace std; + +// Sorts arrar a[0..n-1] using Cocktail sort +void CocktailSort(int a[], int n) +{ + bool swapped = true; + int start = 0; + int end = n - 1; + + while (swapped) + { + // reset the swapped flag on entering + // the loop, because it might be true from + // a previous iteration. + swapped = false; + + // loop from left to right same as + // the bubble sort + for (int i = start; i < end; ++i) + { + if (a[i] > a[i + 1]) { + swap(a[i], a[i + 1]); + swapped = true; + } + } + + // if nothing moved, then array is sorted. + if (!swapped) + break; + + // otherwise, reset the swapped flag so that it + // can be used in the next stage + swapped = false; + + // move the end point back by one, because + // item at the end is in its rightful spot + --end; + + // from right to left, doing the + // same comparison as in the previous stage + for (int i = end - 1; i >= start; --i) + { + if (a[i] > a[i + 1]) { + swap(a[i], a[i + 1]); + swapped = true; + } + } + + // increase the starting point, because + // the last stage would have moved the next + // smallest number to its rightful spot. + ++start; + } +} + +/* Prints the array */ +void printArray(int a[], int n) +{ + for (int i = 0; i < n; i++) + printf("%d ", a[i]); + printf("\n"); +} + +// Driver code +int main() +{ + int a[] = { 5, 1, 4, 2, 8, 0, 2 }; + int n = sizeof(a) / sizeof(a[0]); + CocktailSort(a, n); + printf("Sorted array :\n"); + printArray(a, n); + return 0; +} diff --git a/l/insertion_sort.cpp b/l/insertion_sort.cpp new file mode 100644 index 0000000..7fb92b8 --- /dev/null +++ b/l/insertion_sort.cpp @@ -0,0 +1,45 @@ +// C++ program for insertion sort +#include +using namespace std; + +/* Function to sort an array using insertion sort*/ +void insertionSort(int arr[], int n) +{ + int i, key, j; + for (i = 1; i < n; i++) + { + key = arr[i]; + j = i - 1; + + /* Move elements of arr[0..i-1], that are + greater than key, to one position ahead + of their current position */ + while (j >= 0 && arr[j] > key) + { + arr[j + 1] = arr[j]; + j = j - 1; + } + arr[j + 1] = key; + } +} + +// A utility function to print an array of size n +void printArray(int arr[], int n) +{ + int i; + for (i = 0; i < n; i++) + cout << arr[i] << " "; + cout << endl; +} + +/* Driver code */ +int main() +{ + int arr[] = { 12, 11, 13, 5, 6 }; + int n = sizeof(arr) / sizeof(arr[0]); + + insertionSort(arr, n); + printArray(arr, n); + + return 0; +} \ No newline at end of file