数据结构中排序算法总结

2023-10-07 18:10 热爱学习

============================================ ========================== 文章中讨论的排序算法包括:冒泡排序;选择排序;插入排序;快速排序;希尔排序;堆排序;归并排序;基数排序。注:头文件“array.h”的内容是线性表的建立以及线性表中元素的输出。线性表中元素的输入是从1空间开始的,0空间作为中间变量或者作为临时存储单元。每个排序算法程序都包含头文件“array.h”。运行前需要生成“array.h”头文件。运行时头文件和排序源文件必须在同一个文件夹中。建议不要在同一个工作空间中同时运行多种排序算法的源文件,否则编译器会报错。头文件array.h代码-------------------------------------------------------- ----------------------------------#define N 100 typedef int 数据类型; typedef struct{//定义线性表结构数据类型elem[N];整数长度; }序列列表; void create_array(SeqList *list)//创建线性表 { list->length=0;//初始化数据类型x; printf("*-----输入随机设置的数字(以!结尾)-----*\n\n"); scanf("%d",&x); while(x)//输入线性列表元素 { list->length++;列表->元素[列表->长度]=x; scanf("%d",&x); } } void out(SeqList *s)//输出线性列表元素 { int i; printf("\n*-----输入随机数排序结果如下-----*\n\n"); for(i=1;i<=s->长度;i++) printf("%5d",s->elem[i]); printf(“\n\n”);大多数排序算法都有两个基本操作:(1)比较两个键的大小; (2)改变指向记录的指针或移动记录本身。冒泡排序算法------------------------------------------------------------ - ----------------------------------(1) 从下到上:第一次扫描 比较两个的重量相邻气泡从记录的 R[1..n] 底部向上。如果发现较轻的在下,较重的在上,则将两者交换位置。第一次通过后,“最轻”的气泡浮到区间的顶部。 2次扫描的记录是R[2..n]。第一次扫描完成后,“最轻”的气泡漂浮到R[2]的位置。依此类推,直到 R[1..i] 成为新的有序区域。 #include #include"array.h" /*------------------------------------ --------------*/ //自上而下的冒泡排序算法 void sort(SeqList *list) { int i,j; for(i=1;i length;i++) for(j=1;j<=list->length-i;j++) //从小到大排序 if(list->elem[j]>list-> elem[j+1]) {//0 用空格作为中间变量来交换正向和反向 list->elem[0]=list->elem[j];// list->elem[j]=列表->elem[j+1];列表->elem[j+1]=列表->elem[0]; } } /*------------------------------------------------ ----------- ----*/ void main()//检查算法的正确性 { SeqList range;创建_数组(&范围);排序(&范围);出(&范围); } ----------------------------------------------------------- --- ---------------------------------------------------------- --- (2) 从上到下:第一次扫描从记录的R[1..n]顶部向下比较两个相邻气泡的重量。如果发现较重的在上,较轻的在下,则交换它们。两者的位置。第一次通过后,“最重”的气泡沉到该区间的底部。2 趟