/*
*简单插入排序(以temp元素为中间值 控制循环条件 不满足条件进行交换)
*插入排序(插入一个数据保持有序排列)
*冒泡排序
*改进的冒泡排序算法(有效的降低时间复杂度)
*希尔排序(有点模糊)(插入排序的升级版 增加了增量的概念 可以降低时间复杂度)
*选择排序
*快速排序 (递归的思想)
*堆排序算法(利用二叉树点的储存规则 保证树中元素的顺序保持递增或者递减的规律)
*基数排序算法 (分配(两次分配) 收集 输出)主关键字和次关键字的分配
*归并排序算法
*/
实现代码
#include<stdio.h>
#include<stdlib.h>
#define RADIX 10//基数的个数 0-9
typedef struct node
{
int key;//关键字
struct node *next;//指向下一个数据节点的指针
}Node;//数据节点指针
void simple_insertsort(int *s,int length);//简单插入排序
void insert_sort(int *s,int length,int k);//插入排序
void bubble_sort(int *s,int length);//冒泡排序
void pre_bubblesort(int *s,int length);//改进的冒泡排序的算法
void select_sort(int *s,int length);//选择排序
void shell_sort(int *s,int length);//希尔排序
void Quick_Sort(int *s,int i,int j);//快速排序算法
int partition(int *s,int i,int j);//快速划分函数 配合快速排序函数的使用
void Heap_Sort(int *s,int length);//堆排序算法
void Heap_Adjust(int *s,int i,int length);//排序调整函数 配合堆排序函数的使用
void Radix_sort(int a[],int n);//基数排序函数
int resolve(int key,int level);//对数据进行划分层次
void Arrange(Node*arraynode,Node*group[],int level);//对待排序数据进行分配处理
Node*collect(Node*group[]);//对group数组进行收集处理的函数
void Merge_sort(int *a,int i,int j,int*b );//归并排序函数
void Merge(int *a,int s1,int e1,int s2,int e2,int *b);//合并函数
void main()
{
int m;//数据的个数
int n[100];//待排序的数组
int s[100];//中间数组
int i;
int k;//输入的插入数据
printf("请输入数据的个数:\n");
scanf("%d",&m);
printf("请依次输入数据:\n");
for(i=0;i<m;i++)
scanf("%d",&n[i]);
printf("===========堆排序==============\n");
Heap_Sort(n,m);
for(i=0;i<m;i++)
printf("%d\t",n[i]);
printf("\n");
printf("==========简单插入排序==============\n");
simple_insertsort(n,m);
for(i=0;i<m;i++)
printf("%d\t",n[i]);
printf("\n");
printf("==========冒泡排序==============\n");
bubble_sort(n,m);
for(i=0;i<m;i++)
printf("%d\t",n[