Sort Algorithm
Part -2
Insertion Sort
A sorting algorithm that inserts each item in the proper place into an initially empty list by comparing it with each item in the list until it finds the new element's successor or the end of the list.
2.1 List of c files
2.2 Source code
2.2.1 main.c
#include <stdio.h>
#include <string.h>
#include "sort.h"
int main(int argc, char **argv) {
Item item[] = {"ASORTINGEXAMPLE"};
i_sort(item, 0, strlen(item));
return 0;
}
2.2.2 def.h
typedef char Item, *PItem;
#define less(a, b) ((a) < (b))
#define exch(a, b) {Item tmp; tmp = (a); (a) = (b); (b) = tmp;}
#define compexch(a, b) {if (less((a), (b))) exch((a), (b))}
2.2.3 sort.h
#include "def.h"
void i_sort(Item*, int, int);
2.2.4 sort.c
#include "sort.h"
void i_sort(Item*, int, int);
void i_sort(Item item[], int l, int r) {
int i;
for (i = r - 1; i > l; i--)
compexch(item[i], item[i - 1]);
for (i = l + 2; i < r; i++) {
int j = i;
Item c = item[i];
while (less(c, item[j - 1])) {
item[j] = item[j - 1];
j--;
}
if (j < i)
item[j] = c;
}
}
3.1 List of c# files
3.2 Source code
3.2.1 main.cs
using System;
using System.Collections;
namespace AlgorithmPractice {
/// <summary>
/// Summary description for TestClass.
/// </summary>
class TestClass {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main (string[] args) {
char[] charItem = {'A', 'S', 'O', 'R', 'T',
'I', 'N', 'G', 'E', 'X',
'A', 'M', 'P', 'L', 'E'};
int[] intItem = new int[]{1, 5, 3, 6, 10,
55, 9, 2, 87, 12,
34, 75, 33, 47, 1};
Sorter.InsertionSort(charItem, null, 0, charItem.Length);
Sorter.InsertionSort(intItem, null, 0, intItem.Length);
System.Diagnostics.Debug.WriteLine(new string(charItem));
}
}
}
3.2.2 sorter.cs
using System;
using System.Collections;
namespace AlgorithmPractice {
/// <summary>
/// Summary description for Sorter.
/// </summary>
public class Sorter {
private Sorter(){}
public static void InsertionSort(
IList item, IComparer comparer,
int l, int r) {
if (null == comparer)
comparer = Comparer.Default;
for (int i = r - 1; i > l; i--)
if (comparer.Compare(item[i], item[i - 1]) < 0) {
object tmp = item[i];
item[i] = item[i - 1];
item[i - 1] = tmp;
}
for (int i = l + 2; i < r; i++) {
object c = item[i];
int j = i;
while (comparer.Compare(c, item[j - 1]) < 0) {
item[j] = item[j - 1];
j--;
}
if (j < i)
item[j] = c;
}
}
}
}