Header: stdlib.h
Usage: void qsort (void * base, int nelem, int width, int (* fcmp) (const void *, const void *));
Parameters: a first address to be sorted array
2 to be sorted array the number of elements
space the size of each element 3
4 pointer to a function for sequentially determining an ordering
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define N 16
#define M 5
#define Q 1000
void init(int a[])
{
int i;
srand(time(NULL));
for (i=0; i<N; i++)
a[i] = rand()%100;
}
void show(int a[])
{
int i;
for (i=0; i<N; i++)
printf("%3d", a[i]);
printf("\n");
}
int compare(const void *ai, const void *aj)
{
return *((int*)ai) - *((int*)aj);
}
int comparestr(const void *ai, const void *aj)
{
return strcmp(*((char**)ai), *((char**)aj));
}
int main()
{
/*
int a[N];
init(a);
show(a);
qsort(a, N, sizeof(int), compare);
show(a);
*/
int i,nline,p=0;
char *lineptr[N];
char buf[Q];
for (nline=0; nline<M; nline++)
{
lineptr[nline] = &buf[p];
scanf("%s", lineptr[nline]);
p += strlen(lineptr[nline])+1;
}
qsort(lineptr, nline, sizeof(char*), comparestr);
for (i=0; i<nline; i++)
printf("%s\n", lineptr[i]);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 16
int a[N];
void init(int l, int r)
{
int i;
srand(time(NULL));
for (i=l; i<=r; i++)
a[i] = rand()%100;
}
void show(int l, int r)
{
int i;
for (i=0; i<l; i++) printf(" ");
for (i=l; i<=r; i++) printf("%3d", a[i]);
printf("\n");
}
void swap(int i, int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
int partition(int l, int r)
{
int i, j;
for (j=l, i=j+1; i<=r; i++)
if (a[i]<a[l])
swap(i, ++j);
swap(l, j);
//show(l, r);
return j;
}
void sort(int l, int r)
{
if (l>=r)
return;
int k = partition(l, r);
sort(l, k-1);
sort(k+1, r);
}
int main()
{
init(0, N-1);
show(0, N-1);
sort(0, N-1);
show(0, N-1);
return 0;
}