将n个数排序的算法,该怎么解决
将n个数排序的算法
请各位大侠说说有几个排序的算法,将自己知道的说一下,并附上C代码,请不吝赐教,在此先谢谢各位了!
------解决方案--------------------
请各位大侠说说有几个排序的算法,将自己知道的说一下,并附上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();
}
}
/*--------------------------------------------------------------------------
堆排序
---------------------------------------------------------------------------*/