Fun

A couple of easy sort algorithms for you. Look ma, no array subscripts! C is the shit, kiddies!

#include <stdio.h>#include <stdlib.h>#include <string.h>

#define ELEMENTS 10#define ARRAY_ELEMENT_COUNT(array) (sizeof(array)/sizeof(array[0]))

//type-independent mallocvoid *MyMalloc(size_t size){	void *vp;

	if ((vp = malloc(size)) == NULL)	{		fputs("Cannot allocate memory for malloc.n",stderr);		exit(EXIT_FAILURE);	}

	return(vp);}

//swap void pointersvoid SwapElements(void *pa,void *pb,size_t size){	//temp void pointer to hold an element to swap	void *tmp = MyMalloc(size);

	//use memcpy to perform the swaps	memcpy(tmp,pa,size);	memcpy(pa,pb,size);	memcpy(pb,tmp,size);

	free(tmp);}

//bubble sort implementation, fancy-style.void BubbleSort(float *first,size_t size){	float *current_offset,*current,*last = &first[size - 1];	int flag_swap;

	do	{		for (flag_swap=0,current = first; current 		{			//set a pointer to pointer to current element of array			current_offset = current;

			//increment the temp pointer			current_offset++;

			//compare current element and current[1]			if (*current > *current_offset)			{				//cast to void pointers and swap				SwapElements(current,current_offset,sizeof(float));				flag_swap = 1;				}

		}	}		while(flag_swap);}

//just for funvoid ShuttleSort(float *first,size_t size){	float *current_offset,*current,*back,*last = &first[size - 1];

	for (current = first; current 	{		current_offset = current;		current_offset++;

		if (*current > *current_offset)			SwapElements(current,current_offset,sizeof(float));

		for (back = current; back > first; --back)		{			current_offset = back;			current_offset--;

			if (*back 				SwapElements(back,current_offset,sizeof(float));			else				break;		}	}}

int main(){	int i;	float arrToSort[ELEMENTS];

	for (i = 0;i 	{		puts("Input a floating point number:");		scanf("%f",&arrToSort[i]);	}

	//BubbleSort(arrToSort,ARRAY_ELEMENT_COUNT(arrToSort));	ShuttleSort(arrToSort,ARRAY_ELEMENT_COUNT(arrToSort));

	puts("------------------------");	puts("Output of sorted array:");

	for (i = 0;i 		printf("%fn",arrToSort[i]);

	return(EXIT_SUCCESS);}

Leave a Reply