diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..adb36c8 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.exe \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..188392a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,23 @@ +{ + "files.associations": { + "BeadSort.C": "cpp", + "BubbleSort.C": "cpp", + "CocktailSort.C": "cpp", + "CockTailSort2.C": "cpp", + "GnomeSort.C": "cpp", + "HeapSort2.C": "cpp", + "InsertionSort.C": "cpp", + "MatrixSort.C": "cpp", + "Merge2SortedArray.C": "cpp", + "MergeSort2.C": "cpp", + "MergeSort3.C": "cpp", + "MergeSort4.C": "cpp", + "OddEvenSort.C": "cpp", + "PanCakeSort.C": "cpp", + "PigeonHoleSort.C": "cpp", + "QuickSort.C": "cpp", + "QuickSort2.C": "cpp", + "SelectionSort.C": "cpp", + "ShellSort.C": "cpp" + } +} \ No newline at end of file diff --git a/C/BogoSort.c b/C/BogoSort.c index 27cc30f..dec2643 100644 --- a/C/BogoSort.c +++ b/C/BogoSort.c @@ -15,8 +15,8 @@ int isSorted(int *a, int n) { - while (--n >= 1) - if (a[n] < a[n - 1]) + while (--n >= 1) // Loop through all of the elements + if (a[n] < a[n - 1]) // and compare them to each other until it finds one that's less than another element. return 0; return 1; } @@ -24,7 +24,7 @@ int isSorted(int *a, int n) void shuffle(int *a, int n) { for (int i = 0; i < n; i++) - { + { // Shuffle the values using random number of element. int t = a[i]; int temp = rand() % n; a[i] = a[temp]; @@ -43,14 +43,14 @@ int main(void) int n; printf("\nEnter the number of elements: "); scanf("%d",&n); - + int no[n]; printf("\nEnter %d elements:\n",n); for (int i = 0; i < n; i++) scanf("%d", &no[i]); - + BogoSort(no, n); - + printf("\nSorted list:\n"); for (int i = 0; i < n; i++) printf("%d ", no[i]); diff --git a/C/BubbleSort.C b/C/BubbleSort.C index 69e4886..cd4172c 100644 --- a/C/BubbleSort.C +++ b/C/BubbleSort.C @@ -7,6 +7,7 @@ int main(void) int arr[MAX], i, j, k, temp, n, x; printf("Enter the total number of elements: "); scanf("%d", &n); + for (i = 0; i < n; i++) { printf("\nEnter element %d: ", i + 1); @@ -43,5 +44,6 @@ int main(void) printf("\nSorted list is: \n"); for (i = 0; i < n; i++) printf("%d ", arr[i]); + getch(); } diff --git a/C/CocktailSort.C b/C/CocktailSort.C index 5e9ff72..b46bf4d 100644 --- a/C/CocktailSort.C +++ b/C/CocktailSort.C @@ -1,6 +1,14 @@ #include #include +void Swap(int *a, int *b) +{ + /*int temp = *a; + *a = *b; + *b = temp;*/ + *a = (*a + *b) - (*b = *a); +} + int main(void) { int c, no; @@ -16,26 +24,24 @@ int main(void) do { - for (int i = 0; i < n - 1; i++) + for (int i = 0; i < n - 1; i++) // Go forward { if (data[i] > data[i + 1]) { - data[i] = data[i] + data[i + 1]; - data[i + 1] = data[i] - data[i + 1]; - data[i] = data[i] - data[i + 1]; + Swap(&data[i], &data[i + 1]); } } n--; - for (int i = no, c = 0; i > no; i--) + + for (int i = no, c = 0; i > no; i--) // Go backward { if (data[i] < data[i + 1]) { - data[i] = data[i] + data[i - 1]; - data[i - 1] = data[i] - data[i - 1]; - data[i] = data[i] - data[i - 1]; + Swap(&data[i], &data[i + 1]); } } c++; + } while (n != 0 && c != 0); printf("\nThe sorted elements are: "); diff --git a/C/GnomeSort.C b/C/GnomeSort.C index dfd23ad..27f7667 100644 --- a/C/GnomeSort.C +++ b/C/GnomeSort.C @@ -11,10 +11,10 @@ int main(void) { int i, no; - printf("\nEnter the number of elements(MAXIMUM %d): ", MAX); + printf("\nEnter the number of elements: "); scanf("%d", &no); int a[no]; - + printf("\nEnter %d elements: \n", no); for (i = 0; i < no; i++) scanf("%d", &a[i]); diff --git a/C/HeapSort2.C b/C/HeapSort2.C index 549e32c..e100d86 100644 --- a/C/HeapSort2.C +++ b/C/HeapSort2.C @@ -1,87 +1,93 @@ -#include -#include - -//Created in College library (March 5th) - -void heapsort(int list[],int n) { - int step=1; - for(int k=n; k>=2; k--) { - int temp=list[1]; - list[1]=list[k]; - list[k]=temp; - int i=1; - int value =list[1]; - int j=2; - - if((j+1)list[j]) +#include +#include + +// Created in College library (March 5th) + +void heapsort(int list[], int n) +{ + int step = 1; + for (int k = n; k >= 2; k--) + { + int temp = list[1]; + list[1] = list[k]; + list[k] = temp; + int i = 1; + int value = list[1]; + int j = 2; + + if ((j + 1) < k) + if (list[j + 1] > list[j]) j++; - while((j<=(k-1)) && (list[j]>value)) - { - list[i]=list[j]; - i=j; - j=2*i; + while ((j <= (k - 1)) && (list[j] > value)) + { + list[i] = list[j]; + i = j; + j = 2 * i; - if((j+1)list[j]) + if ((j + 1) < k) + if (list[j + 1] > list[j]) j++; - else if(j>n) - j=n; + else if (j > n) + j = n; - list[i]=value; + list[i] = value; } - printf("\nStep = %d ",step); + printf("\nStep = %d ", step); step++; - for(int p=1; p<=n; p++) - printf(" %d",list[p]); + for (int p = 1; p <= n; p++) + printf(" %d", list[p]); } - } -void createHeap(int list[],int n) { - for(int k=2; k<=n; k++) +void createHeap(int list[], int n) +{ + for (int k = 2; k <= n; k++) { - int i=k; - int temp=list[k]; - int j=i/2; + int i = k; + int temp = list[k]; + int j = i / 2; - while((i>1) && (temp>list[j])) + while ((i > 1) && (temp > list[j])) { - list[i]=list[j]; - i=j; - j=i/2; - if(j<1) - j=1; + list[i] = list[j]; + i = j; + j = i / 2; + if (j < 1) + j = 1; } - list[i]=temp; + list[i] = temp; } } -void display(int list[],int n) { - for(int i=1; i<=n; i++) - printf(" %d",list[i]); +void display(int list[], int n) +{ + for (int i = 1; i <= n; i++) + printf(" %d", list[i]); } -int main(void) { +int main(void) +{ int list[20]; int n; printf("enter the size of the list: "); - scanf("%d",&n); + scanf("%d", &n); + + for (int i = 1; i <= n; i++) + list[i] = rand() % 100; - for(int i=1; i<=n; i++) - list[i]=rand()%100; printf("\nlist:\n"); - display(list,n); + display(list, n); + + createHeap(list, n); - createHeap(list,n); printf("\nHeap:\n"); - display(list,n); + display(list, n); printf("\n"); - heapsort(list,n); + heapsort(list, n); printf("\nSorted List: \n"); - display(list,n); + display(list, n); } diff --git a/C/InsertionSort.C b/C/InsertionSort.C index 4704a6e..f86bbe5 100644 --- a/C/InsertionSort.C +++ b/C/InsertionSort.C @@ -8,17 +8,19 @@ int main() int arr[MAX], i, j, k, n; printf("\nEnter the number of elements (Maximum: 10): "); scanf("%d", &n); + for (i = 0; i < n; i++) { printf("\nEnter %d element : ", i + 1); scanf("%d", &arr[i]); } + printf("\nUnsorted list is: "); for (i = 0; i < n; i++) - { printf("%d ", arr[i]); - } + printf("\n"); + for (j = 1; j < n; j++) { k = arr[j]; @@ -28,6 +30,7 @@ int main() } arr[i + 1] = k; } + printf("\nSorted list is: "); for (i = 0; i < n; i++) printf("%d ", arr[i]); diff --git a/C/Merge2SortedArray.C b/C/Merge2SortedArray.C index 485da9e..f8bdd00 100644 --- a/C/Merge2SortedArray.C +++ b/C/Merge2SortedArray.C @@ -8,20 +8,24 @@ int main() printf("Enter the number of elements in list1: "); scanf("%d", &max1); + printf("\nGive the element in sorted order only: \n"); for (i = 0; i < max1; i++) { printf("\n Enter element %d : ", i + 1); scanf("%d", &arr1[i]); } + printf("\nEnter the number of elements in list2: "); scanf("%d", &max2); + printf("\nGive the element in sorted order only: \n"); for (i = 0; i < max2; i++) { printf("\nEnter element %d : ", i + 1); scanf("%d", &arr2[i]); } + i = 0; j = 0; k = 0; diff --git a/C/MergeSort2.C b/C/MergeSort2.C index 019a525..91964cb 100644 --- a/C/MergeSort2.C +++ b/C/MergeSort2.C @@ -16,6 +16,7 @@ int main() printf("\nUnsorted list: "); for (i = 0; i < n; i++) printf("%d ", arr[i]); + for (size = 1; size < n; size = size * 2) { l1 = 0; @@ -52,9 +53,11 @@ int main() for (i = 0; i < n; i++) printf("%2d ", arr[i]); } + printf("\n\nSorted list is: "); for (i = 0; i < n; i++) printf("%2d ", arr[i]); + getch(); return 0; } diff --git a/C/PanCakeSort.C b/C/PanCakeSort.C index 5626c76..00c91e8 100644 --- a/C/PanCakeSort.C +++ b/C/PanCakeSort.C @@ -7,7 +7,9 @@ int PanCakeSort(int *list, unsigned int length) { if (length < 2) return 0; + int i, a, max_pos, moves = 0; + for (i = length; i > 1; i--) { max_pos = 0; @@ -16,13 +18,16 @@ int PanCakeSort(int *list, unsigned int length) if (list[a] > list[max_pos]) max_pos = a; } + if (max_pos == i - 1) continue; + if (max_pos) { moves++; Flip(list, length, max_pos + 1); } + Flip(list, length, i); } return moves; diff --git a/C/Radix_Sort.c b/C/Radix_Sort.c index 24ce339..9f67a67 100644 --- a/C/Radix_Sort.c +++ b/C/Radix_Sort.c @@ -2,7 +2,7 @@ #define MAX 10 -//#define SHOWPASS +// #define SHOWPASS void print(int *a, int n) { @@ -22,15 +22,21 @@ int RadixSort(int *a, int n) while (m / exp > 0) { int box[10] = {0}; + for (i = 0; i < n; i++) box[a[i] / exp % 10]++; + for (i = 1; i < 10; i++) box[i] += box[i - 1]; + for (i = n - 1; i >= 0; i--) b[--box[a[i] / exp % 10]] = a[i]; + for (i = 0; i < n; i++) a[i] = b[i]; + exp *= 10; + /*#ifdef SHOWPASS printf("\n\nPASS: "); print(a, n); diff --git a/C/SelectionSort.C b/C/SelectionSort.C index 4a3bd39..0cca02f 100644 --- a/C/SelectionSort.C +++ b/C/SelectionSort.C @@ -19,8 +19,7 @@ void selectionSort(int arr[], int size) void swap(int *a, int *b) { - int temp; - temp = *a; + int temp = *a; *a = *b; *b = temp; } @@ -28,20 +27,20 @@ void swap(int *a, int *b) int main() { int arr[10], i, size; - //clrscr(); + printf("\nHow many numbers you want to sort??: "); scanf("%d", &size); + printf("\nEnter %d numbers: \n", size); for (i = 0; i < size; i++) - { scanf("%d", &arr[i]); - } + selectionSort(arr, size); + printf("\nSorted array: "); for (i = 0; i < size; i++) - { printf("%d ", arr[i]); - } + getch(); return 0; } diff --git a/C/ShakerSort.c b/C/ShakerSort.c index c40458e..71dcc58 100644 --- a/C/ShakerSort.c +++ b/C/ShakerSort.c @@ -1,5 +1,6 @@ #include #define MAX 5 + void swap(int *a, int *b) { int temp = *a; diff --git a/C/StoogeSort.c b/C/StoogeSort.c index d25b5a3..8896aaf 100644 --- a/C/StoogeSort.c +++ b/C/StoogeSort.c @@ -1,32 +1,51 @@ #include #define MAX 5 -void StoogeSort(int a[], int i, int j) +int array[] = {7, 85, 41, 6, 3, 7, 1}; +int n = sizeof(array) / sizeof(array[0]); + +void swap(int *a, int *b) +{ + *a = (*a + *b) - (*b = *a); +} + +void StoogeSort(int a[], int i, int j, int flag) { - int temp, k; - if (a[i] > a[j]) - temp = a[i], a[i] = a[j], a[j] = temp; + //int temp, k; + if (!flag) + { + if (a[i] > a[j]) + swap(&a[i], &a[j]); + } + else if (a[i] < a[j]) + swap(&a[i], &a[j]); if ((i + 1) >= j) return; - k = (int)((j - i + 1) / 3); - StoogeSort(a, i, j - k); - StoogeSort(a, i + k, j); - StoogeSort(a, i, j - k); + int k = (int)((j - i + 1) / 3); + StoogeSort(a, i, j - k, flag); + StoogeSort(a, i + k, j, flag); + StoogeSort(a, i, j - k, flag); } int main(void) { int a[MAX], i; - printf("\nEnter %d values:\n", MAX); + /*printf("\nEnter %d values:\n", MAX); for (i = 0; i < MAX; i++) - scanf("%d", &a[i]); + scanf("%d", &a[i]);*/ - StoogeSort(a, 0, MAX - 1); + StoogeSort(array, 0, n - 1, 0); printf("\nSorted values:"); - for (i = 0; i < MAX; i++) - printf("\t%d", a[i]); + for (i = 0; i < n; i++) + printf("\t%d", array[i]); + + StoogeSort(array, 0, n - 1, 1); + + printf("\nSorted values:"); + for (i = 0; i < n; i++) + printf("\t%d", array[i]); } \ No newline at end of file