quicksort
Holyjesusunknown
c_cpp
4 years ago
1.8 kB
9
Indexable
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 10
void quicksort(int *, int, int);
int partition(int *, int p, int r);
int i = 0, j = 0, k = 0, temp;
int main(){
int a[Maxsize], n, s;
printf("\n 1.Enter the Array \n 2.Quick sort\n 3.Diplay the array \n 4.Exit");
while (1)
{
printf("\n Enter your choice : ");
scanf("%d", &s);
switch (s)
{
case 1:
printf("\n Enter the Number of Elements : ");
scanf("%d", &n);
printf("\n Enter the numbers :\n");
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
printf("\n Unsorted array elements are\n");
for (i = 0; i < n; i++)
printf("\t%d", *(a + i));
break;
case 2:
printf("\n'Quick Sort'\n");
quicksort(a, 0, n - 1);
break;
case 3:
printf("\n Sorted array elements are\n");
for (i = 0; i < n; i++)
printf("\t%d", *(a + i));
break;
case 4:
exit(0);
}
}
return 0;
}
void quicksort(int *m, int p, int r)
{
int q;
if (p < r)
{
q = partition(m, p, r);
quicksort(m, p, q - 1);
quicksort(m, q + 1, r);
}
}
int partition(int *m, int p, int r)
{
k = *(m + p);
i = p;
j = r;
while (i < j)
{
while (*(m + i) <= k)
i++;
while (*(m + j) > k)
j--;
if (i < j)
{
temp = *(m + i);
*(m + i) = *(m + j);
*(m + j) = temp;
}
}
*(m + p) = *(m + j);
*(m + j) = k;
return j;
}Editor is loading...