mirror of
https://github.com/TheAlgorithms/C
synced 2025-02-07 17:24:11 +03:00
Merge pull request #521 from Hiyabye/add_sort_algorithm
Added Sorting Algorithms
This commit is contained in:
commit
ca27500c5e
75
sorting/Cocktail_Sort.c
Normal file
75
sorting/Cocktail_Sort.c
Normal file
@ -0,0 +1,75 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
void cocktailSort(int arr[], int size)
|
||||
{
|
||||
int i, changed = TRUE, temp, start = 0, end = size - 1;
|
||||
|
||||
while (changed)
|
||||
{
|
||||
changed = FALSE;
|
||||
for (i=start; i<end; i++)
|
||||
{
|
||||
if (arr[i] > arr[i+1])
|
||||
{
|
||||
temp = arr[i];
|
||||
arr[i] = arr[i+1];
|
||||
arr[i+1] = temp;
|
||||
changed = TRUE;
|
||||
}
|
||||
}
|
||||
end--;
|
||||
|
||||
if (changed == FALSE)
|
||||
{
|
||||
break;
|
||||
}
|
||||
changed = FALSE;
|
||||
|
||||
for (i=end-1; i>=start; i--)
|
||||
{
|
||||
if (arr[i+1] < arr[i])
|
||||
{
|
||||
temp = arr[i+1];
|
||||
arr[i+1] = arr[i];
|
||||
arr[i] = temp;
|
||||
changed = TRUE;
|
||||
}
|
||||
}
|
||||
start++;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int i, n;
|
||||
|
||||
printf("Enter the size of the array: ");
|
||||
scanf("%d", &n);
|
||||
int* arr = (int*)malloc(sizeof(int) * n);
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
printf("Number #%d: ", i + 1);
|
||||
scanf("%d", &arr[i]);
|
||||
}
|
||||
|
||||
printf("You entered: ");
|
||||
for (i=0; i<n; i++)
|
||||
{
|
||||
printf("%d ", arr[i]);
|
||||
}
|
||||
cocktailSort(arr, n);
|
||||
printf("\nSorted array: ");
|
||||
for (i=0; i<n; i++)
|
||||
{
|
||||
printf("%d ", arr[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
free(arr);
|
||||
return 0;
|
||||
}
|
73
sorting/Pigeonhole_Sort.c
Normal file
73
sorting/Pigeonhole_Sort.c
Normal file
@ -0,0 +1,73 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
void pigeonholeSort(int arr[], int size)
|
||||
{
|
||||
int i, j, min = arr[0], max = arr[0], range;
|
||||
|
||||
// Getting range of the array using max and min
|
||||
for (i=1; i<size; i++)
|
||||
{
|
||||
if (arr[i] < min)
|
||||
min = arr[i];
|
||||
if (arr[i] > max)
|
||||
max = arr[i];
|
||||
}
|
||||
range = max - min + 1;
|
||||
|
||||
// Make 'holes' and put array's numbers in holes
|
||||
int * holes = (int*)malloc(sizeof(int) * range);
|
||||
for (i=0; i<range; i++)
|
||||
{
|
||||
holes[i] = 0;
|
||||
}
|
||||
for (i=0; i<size; i++)
|
||||
{
|
||||
holes[arr[i] - min]++;
|
||||
}
|
||||
|
||||
// Copy the numbers back to the original array
|
||||
j=0;
|
||||
for (i=0; i<range; i++)
|
||||
{
|
||||
while (holes[i] > 0)
|
||||
{
|
||||
arr[j] = i + min;
|
||||
holes[i]--;
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
free(holes);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int i, n;
|
||||
|
||||
printf("Enter the size of the array: ");
|
||||
scanf("%d", &n);
|
||||
int * arr = (int*)malloc(sizeof(int) * n);
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
printf("Number #%d: ", i + 1);
|
||||
scanf("%d", &arr[i]);
|
||||
}
|
||||
|
||||
printf("You entered: ");
|
||||
for (i=0; i<n; i++)
|
||||
{
|
||||
printf("%d ", arr[i]);
|
||||
}
|
||||
pigeonholeSort(arr, n);
|
||||
printf("\nSorted array: ");
|
||||
for (i=0; i<n; i++)
|
||||
{
|
||||
printf("%d ", arr[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
free(arr);
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user