发布时间 : 星期二 文章c语言各种排序举例更新完毕开始阅读21eb098c84868762caaed593
for(i=1;i<=L.count;i++) printf(\printf(\}
***************************************************
3.插入排序的程序实现:
//* * * * * * * * * * * * * * * * * * * * * * * * //*PROGRAM :直接插入排序 * //*CONTENT :直接插入排序 *
//* * * * * * * * * * * * * * * * * * * * * * * * #include
#define MAXSIZE 20 //排序表的最大容量 typedef struct //定义排序表的结构 {int elemword[MAXSIZE]; //数据元素关键字 int count; //表中当前元素的个数 }SqList;
void InitialSqList(SqList&); //初始化排序表 void InsertSort(SqList&); //直接插入排序 void PrintSqList(SqList); //显示表中的所有元素 void main()
{SqList L; //声明表L char j='y';
//-------------------------程序说明------------------------------- printf(\本程序将演示直接插入排序的操作。\\n\
//---------------------------------------------------------------- while(j!='n'&&j!='N') {InitialSqList(L); InsertSort(L); PrintSqList(L);
printf(\继续进行下一次排序吗?(Y/N)\scanf(\}
printf(\程序运行结束!\\n按任意键关闭窗口!\\n\getchar();getchar(); }
void InitialSqList(SqList &L) {//表初始化 int i;
printf(\请输入待排序的记录的个数:\scanf(\
printf(\请输入待排序的记录的关键字(整型数):\\n\for(i=1;i<=L.count;i++) scanf(\}
void InsertSort(SqList &L) {int i,j;
for(i=2;i<=L.count;i++)
if(L.elemword[i] void PrintSqList(SqList L) {//显示表所有元素 int i; printf(\已排好序的序列如下:\\n\for(i=1;i<=L.count;i++) printf(\printf(\} 4.Shell排序的程序实现: //* * * * * * * * * * * * * * * * * * * * * * * * //*PROGRAM :希尔排序 * //*CONTENT :希尔排序 * //* * * * * * * * * * * * * * * * * * * * * * * * #include #define MAXSIZE 20 //排序表的最大容量 typedef struct //定义排序表的结构 {int elemword[MAXSIZE]; //数据元素关键字 int count; //表中当前元素的个数 }SqList; void InitialSqList(SqList&); //初始化排序表 void ShellSort(SqList &,int [],int);//希尔排序 void ShellInsert(SqList&,int); //一趟希尔排序 void PrintSqList(SqList); //显示表中的所有元素 void main() {SqList L; //声明表L char j='y'; int dlta[3]={5,3,1}; //希尔排序增量序列,本程序采用5,3,1序列 int t=3; //希尔排序增量序列中增量的个数 //-------------------------程序说明------------------------------- printf(\本程序将演示希尔排序的操作。\\n增量序列为5,3,1。\\n\//---------------------------------------------------------------- while(j!='n'&&j!='N') {InitialSqList(L); //待排序列初始化 ShellSort(L,dlta,t); //希尔排序 PrintSqList(L); //显示希尔排序结果 printf(\继续进行下一次排序吗?(Y/N)\scanf(\} printf(\程序运行结束!\\n按任意键关闭窗口!\\n\getchar();getchar(); } void InitialSqList(SqList &L) {//表初始化 int i; printf(\请输入待排序的记录的个数:\scanf(\ printf(\请输入待排序的记录的关键字(整型数):\\n\for(i=1;i<=L.count;i++) scanf(\} void ShellSort(SqList &L,int dlta[],int t) {//按增量序列dlta[0..t-1]对顺序表L作希尔排序 for(int k=0;k ShellInsert(L,dlta[k]); //一趟增量为dlta[k]的插入排序 } void ShellInsert(SqList &L,int dk) {//对顺序表L做一趟希尔插入排序。本算法是和一趟直接插入排序相比,作了以下修改: //1. 前后记录的增量是dk,而不是1 //2. 0号单元只是暂存单元,不是哨兵。当j<=0时,插入位置已找到 int i,j; for(i=dk+1;i<=L.count;i++) if(L.elemword[i] L.elemword[j+dk]=L.elemword[j]; //记录后移,查找插入位置 L.elemword[j+dk]=L.elemword[0]; //插入到正确的位置 } } void PrintSqList(SqList L) {//显示表所有元素 int i; printf(\已排好序的序列如下:\\n\for(i=1;i<=L.count;i++) printf(\printf(\} 5.快速排序的程序实现: //* * * * * * * * * * * * * * * * * * * * * * * * //*PROGRAM :快速排序 * //*CONTENT :快速排序 * //* * * * * * * * * * * * * * * * * * * * * * * * #include