
排序算法
冉冉流年
这个作者很懒,什么都没留下…
展开
-
堆排序总结
1.算法原理算法基于顺序存储的“完全二叉树”:结点i的左孩子是2i;右孩子是2i+1;父节点是i/2;编号小于n/2的结点都是分支结点。大根堆(根>=左、右),小根堆(根<=左、右)建堆:编号<=n/2的所有结点依次”下坠“调整(自底向上处理分支结点),调整规则:小元素逐层”下坠“(与关键字更大的孩子交换)。排序:将栈顶元素加入有序子序列(栈顶元素与栈底元素交换),栈底元素换到栈顶后,需要进行”下坠“调整,恢复”大根堆“的特性;重复上述重复n-1趟。2.具体代码//第一部分原创 2020-09-27 19:45:28 · 447 阅读 · 0 评论 -
归并算法总结
1.算法原理把两个或多个有序的子序列合并为一个2.归并排序算法步骤若low<high,则将序列从中间mid=(low+high)/2分开对左半部分[low,mid]递归地进行归并排序对右半部分[mid+1,high]递归地进行归并排序将左右两个有序的子序列Merge为一个3.具体算法#include<stdio.h> #include<stdlib.h>#include<string.h>void Merge(int A[],int B[]原创 2020-09-25 17:51:03 · 558 阅读 · 0 评论 -
简单选择排序总结
1.算法原理每一趟在待排序元素中选取关键字最小的元素加入有序子序列,必须进行总共n-1趟处理。2.具体算法//第一部分:排序算法//9-5 简单选择排序//2020.09.24 void swap(int *x,int *y){ int temp; temp=*x; *x=*y; *y=temp;}void SelectSort(int A[],int n){ int i,j,min; for(i=0;i<n-1;i++) { min=i;//每轮选择前都将i定位原创 2020-09-24 16:16:10 · 255 阅读 · 0 评论 -
直接插入排序算法总结
1.直接插入排序算法原理算法思想:每次将一个待排序的记录按其关键字大小插入到前面已排好的子序列中,知道全部记录插入完成。2.具体算法//第一部分:排序算法//9-3 直接插入排序//2020.09.22 //直接插入排序void InsertSort(int A[],int n){ int i,j; int temp; for(i=1;i<n;i++)//将各元素插入已排好的序列中 { if(A[i]<A[i-1])//若A[i]的关键字小于前驱 { t原创 2020-09-24 15:42:05 · 461 阅读 · 0 评论 -
希尔排序算法总结
1.算法原理希尔排序:先将待排序表分割成若干形如L[i,i+d,i+2d,…,i+kd]的“特殊”子表,对各子表分别进行直接插入排序。缩小增量d,重复上述过程,直到d=1为止。2.具体算法//第一部分:排序算法//9-4 希尔排序//2020.09.23 //先追求表中元素部分有序,再逐渐逼近全局有序 void ShallSort(int A[],int n){ int d,i,j; for(d=n/2;d>=1;d/=2)//步长变化 for(i=d+1;i<n;i++原创 2020-09-24 15:24:57 · 299 阅读 · 0 评论 -
冒泡排序总结
1.冒泡排序算法的基本原理从后往前(或从前往后)两两比较相邻元素的值,若为逆序,则交换它们,直到序列比较完。称这样过程为一趟冒泡排序,最多只需n-1趟排序。每一趟排序都可以使一个元素移动到最终位置,已经确定最终位置的元素在之后的处理中无需再对比。如果某一趟排序过程中未发生“交换”,则算法可提前结束。2.具体算法//第一部分:排序算法//9-1 冒泡排序//2020.09.20 void swap(int *x,int *y)//交换函数{ int temp; temp = *x; *原创 2020-09-22 13:27:01 · 880 阅读 · 0 评论 -
快速排序总结
1.快速排序算法思想快速排序的思想是在数组[p,r]中选择一个分区点q,将数组一分为2,同时将小于分区点的数值的放到分区点左侧[p,q-1],大于分区点的数值的放到分区点右侧[q+1,r],重复这个过程。2.具体算法代码//第一部分:查找算法//9-1 快速排序//2020.09.20 void QuickSort(int arr[],int low,int high){ int temp; int i=low,j=high; if(low<high) { temp=arr[原创 2020-09-20 11:47:08 · 123 阅读 · 0 评论