Combo Sort Algorithm in C

Sorting algorithms can be mixed and matched to yield the desired properties. We want fast average performance, good worst case performance, and no large extra storage requirement. We can achieve the goal by starting with the Quicksort (fastest on average). We modify Quicksort by sorting small partitions by using Insertion Sort (best with small partition). If we detect two partitions are badly balanced, we sort the larger partition by Heapsort (good worst case performance). Of course we cannot undo the bad partitions, but we can stop the possible degenerate case from continuing to generate bad partitions.

#include <stdlib.h>
#include <stdio.h>
 
 
#define uint32 unsigned int

Shellsort Algorithm in C

Sort every Nth element in an array using insertion sort. Repeat using smaller N values, until N = 1. On average, Shellsort is fourth place in speed. Shellsort may sort some distributions slowly.

#include <stdlib.h>
#include <stdio.h>
 
 
#define uint32 unsigned int

Heapsort Algorithm in C

Form a tree with parent of the tree being larger than its children. Remove the parent from the tree successively. On average, Heapsort is third place in speed. Heapsort does not need extra buffer, and performance is not sensitive to initial distributions.

#include <stdlib.h>
#include <stdio.h>
 
 
#define uint32 unsigned int

Mergesort Algorithm in C

Start from two sorted runs of length 1, merge into a single run of twice the length. Repeat until a single sorted run is left. Mergesort needs N/2 extra buffer. Performance is second place on average, with quite good speed on nearly sorted array. Mergesort is stable in that two elements that are equally ranked in the array will not have their relative positions flipped.

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


#define uint32 unsigned int

Quicksort Algorithm in C

Partition array into two segments. The first segment all elements are less than or equal to the pivot value. The second segment all elements are greater or equal to the pivot value. Sort the two segments recursively. Quicksort is fastest on average, but sometimes unbalanced partitions can lead to very slow sorting.
 
#include <stdlib.h>
#include <stdio.h>
 
#define INSERTION_SORT_BOUND 16 /* boundary point to use insertion sort */
 
#define uint32 unsigned int

Insertion Sort Algorithm in C

Scan successive elements for out of order item, then insert the item in the proper place. Sort small array fast, big array very slowly.

#include <stdlib.h>
#include <stdio.h>
 
 
#define uint32 unsigned int

Selection Sort Algorithm in C

Find the largest element in the array, and put it in the proper place. Repeat until array is sorted. This is also slow.

#include <stdlib.h>
#include <stdio.h>
 
 
#define uint32 unsigned int

Bubble Sort Algorithm in C

Exchange two adjacent elements if they are out of order. Repeat until array is sorted. This is a slow algorithm.

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


#define uint32 unsigned int

Double Linked List in php

Below is a non circular double linked list php implementation. I do not frequently encounter linked-list coding in practice, but doing it just for the fun of it feels nice; also helps to brush up on those data structure theories.

Main Code:

Linked List in PHP How to

Data structures are one of the core elements of computer science and they are also fun to program. But being a web developer the opportunity for implementing them in any application is quite rare. But then I thought, What the heck! I can just code for the joy of it, and it will also help me brush up on my DS skills. So here it is, a single linked list implementation in PHP for whoever may care. I will be posting other data structure and algorithm implementations here, so keeping watching. The code is given below.

CODE: