将n个数排序的算法,该怎么解决

将n个数排序的算法
请各位大侠说说有几个排序的算法,将自己知道的说一下,并附上C代码,请不吝赐教,在此先谢谢各位了!
------解决方案--------------------

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

#define MAX_ARRAY_SIZE 10
#define RAND_RANGE 100

int nArray[MAX_ARRAY_SIZE];

typedef enum 
{
SORT_BUBBLE = 1,
SORT_SELECT,
SORT_QUICK,
SORT_INSERT,
SORT_SHELL,
SORT_HEAP,

}eSortType;

void Swap(int *m, int *n)
{
int temp;

temp = *m;
*m = *n;
*n = temp;
}

/*--------------------------------------------------------------------------
     打印
---------------------------------------------------------------------------*/
void Display()
{
int i;
 
for (i = 0; i < MAX_ARRAY_SIZE; i++)
printf("%d ", nArray[i]);

printf("\n");
}

/*--------------------------------------------------------------------------
   冒泡排序
---------------------------------------------------------------------------*/
void BubbleSort(int nArray[], int n)
{
int i, j, temp;

for (i = n - 1; i > 0; i--)
{
for (j = 0; j < i; j++)
{
if (nArray[j] > nArray[j + 1])
{
temp = nArray[j];
nArray[j] = nArray[j + 1];
nArray[j + 1] = temp;
}
}

printf("第%d趟排序后: ", n - i);
Display();
}
}

/*--------------------------------------------------------------------------
   选择排序
---------------------------------------------------------------------------*/
void SelectSort(int nArray[], int n)
{
int i, j, min, temp;

for (i = 0; i < n - 1; i++)
{
min = i;

for (j = i + 1; j < n; j++)
{
if (nArray[min] > nArray[j])
min = j;
}

temp = nArray[i];
nArray[i] = nArray[min];
nArray[min] = temp;

printf("第%d趟排序后: ", i + 1);
Display();
}
}

/*--------------------------------------------------------------------------
   快速排序
---------------------------------------------------------------------------*/
int nSortCount = 0;
void QuickSort(int nArray[], int n)
{
int left, right, key;

left = 0;
right = n - 1;
key = nArray[left];

if (left >= right)
return;

while (left < right)
{
while (left < right && nArray[right] >= key)
right--;
nArray[left] = nArray[right];

while (left < right && nArray[left] <= key)
left++;
nArray[right] = nArray[left];
}

nArray[right] = key;

printf("第%d趟排序后: ", nSortCount++);
Display();

QuickSort(nArray, right);
QuickSort(nArray + right + 1, n - right - 1); 
}

/*--------------------------------------------------------------------------
   插入排序
---------------------------------------------------------------------------*/
void InsertSort(int nArray[], int n)
{
int i, j, temp;

for (i = 1; i < n; i++)
{
j = i;
temp = nArray[i];

while (j > 0 && temp < nArray[j - 1])
{
nArray[j] = nArray[j - 1];
j--;
}

nArray[j] = temp;

printf("第%d趟排序后: ", i);
Display();
}
}

/*--------------------------------------------------------------------------
   希尔排序
---------------------------------------------------------------------------*/
void ShellSort(int nArray[], int n)
{
int gap, i, j, temp;

for (gap = n/2; gap > 0; gap /= 2)
{
for (i = gap; i < n; i++)
{
temp = nArray[i];

for (j = i; j >= gap && temp < nArray[j - gap]; j -= gap)
nArray[j] = nArray[j - gap];
nArray[j] = temp;
}

printf("增量%d排序后: ", gap);
Display();
}
}

/*--------------------------------------------------------------------------
   堆排序
---------------------------------------------------------------------------*/