通过多次运行程序,均显示快速排序算法最快,时间复杂度最低,通过所学的知识来计算,快速排序平均时间复杂度是0(nlog2n),最好情况0(nlog2n),最坏情况0(n2),相对来说,这次实验符合理论规律。
时间复杂度是什么? 官方解释: 算法的执行时间需要依据算法所编制的程序在计算机上于运行时所消耗的时间来度量。在算法中可以使用基本的语句的执行次数作为算法的时间复杂单位,可以认为一个特定算法时间性能只依赖于问题的规模(n),或者说它是一个特定算法时间性能只依赖于问题n的一个函数f(n),当问题规模n趋近于无穷...
②最好情况,整个序列都是顺序的,外层循环每一轮循环,if都不满足,不会进行内层循环,所以一共有n次比较,所以时间复杂度为O(n)。 稳定性:是稳定的。 折半插入排序:将比较和移动这两个操作分离出来,也就是先利用折半查找找到插入的位置,然后一次性移动元素,再插入该元素。 voidInsertSort(Elemtype A[],intn){i...
Node* createList() { Node* head = (Node*)malloc(sizeof(Node)); // 创建头节点 head->next = NULL; // 初始化链表为空 return head;} 4、链表插入 在链表的末尾插入一个节点,需要先创建一个新的节点,然后把它链接到链表的末尾。例如:void insert(Node* head, int data) { Node* newNode ...
s.insert(d);s.insert(e);s.insert(f);s.insert(g);s.insert(h);s.insert(i);return s....
");return ERROR;}for(i=0;i<t;i++){ShellInsert(L,dlta[i]);//一趟增量为dlta[k]的插入排序}return OK;}//***// 起泡排序//***Status BubbleSort(Sqlist &L){int i,j,t;if(L.length==0){printf("要排序的数据为空!");return ERROR;}for(i=1;i<=...
单链表尾插数据,时间复杂度为 O(N) 如果单链表空,需要改变外部头指针phead的指向,使其指向新增加的节点newnode。这种情况函数需要得到外部头指针的地址&phead,即二级结构体指针SLNode** pphead; 如果单链表不为空,就不需要改变外部头指针phead的指向,只需要从第一个节点开始向后遍历链表,直到找到尾节点,然后使...
其中,Insert()和DeleteMax()是难点。 堆的实现(以最大堆为例) 最大堆的创建 typedef struct HeapStruct *MaxHeap; struct HeapStruct { ElementType *Elements; /* 存储堆元素的数组 */ int Size; /* 堆的当前元素个数 */ int Capacity; /* 堆的最大容量 */ ...