![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
徐煜清
这个作者很懒,什么都没留下…
展开
-
直接排序
对于给定的一组记录,初始时假定第一个记录自成一个有序的序列,其余的记录为无序序列;接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列为止。#include void InsertSort(int par_array[], int array_size){ int i, j; int temp; for (i =原创 2017-12-01 23:22:25 · 139 阅读 · 0 评论 -
基数排序-改
#include #include int get_Max(int *a,int len){ int max = a[0],i; for(i=1;i<len;i++) { if(a[i]>max) max=a[i]; } return max;}void Radixing(int *a,int exp,int len){ int i; int *temp=(i原创 2018-01-28 22:13:38 · 193 阅读 · 0 评论 -
随机分组实例
#include #include int main(){ char *name[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "原创 2018-01-06 13:32:04 · 2715 阅读 · 0 评论 -
分块查找
#include #define MAX1 100 //数据表的最大长度 #define MAX2 20 //索引表的最大长度 typedef int ElemType; typedef char InfoType[10]; typedef struct { ElemType key; //KeyType为关键字的原创 2017-12-29 22:33:46 · 463 阅读 · 0 评论 -
数组中的排序
将所给的数组所有的奇数移到偶数之前,要求时间复杂度为O(n)#include #include using namespace std;#define MAX 100void Split(int a[],int n);void Print(int a[],int n);int main(){ int n; int a[]={29,54,68,32,49,21,396,原创 2017-12-25 14:50:59 · 133 阅读 · 0 评论 -
基数排序
基数排序(Radix Sorting)是一种借助多关键字排序的思想对单逻辑关键字进行关系的方法。基数排序不需要进行记录关键字间的比较。主要分为两个过程:(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中 #include #include void RadixC原创 2017-12-06 19:38:23 · 183 阅读 · 0 评论 -
递归算法4
//和式分解#include #define N 50void rd(int a[],int i,int k);int main() { int n,a[N]; printf("请输入一个整数n(0<=n<=50):"); scanf("%d",&n); a[0]=n; printf("和式分解结果:\n"); rd(a,n,1); return 0;}vo原创 2017-12-21 23:37:36 · 158 阅读 · 0 评论 -
枚举算法1
#include int main(){ int c1,c2,c3,n; printf("请输入一个整数:"); scanf("%d",&n); printf("\n"); c1=n%3==0; c2=n%5==0; c3=n%7==0; switch((c1<<2)+(c2<<1)+c3) { case 0: printf("能被3,5,7整除\n");原创 2017-12-22 11:19:20 · 175 阅读 · 0 评论 -
递归算法3
递归求最大公约数#include int gcd(int m,int n);int main(){ int m,n,result; printf("请输入两个整数:"); scanf("%d%d",&m,&n); printf("%d %d\n",m,n); gcd(m,n); result=gcd(m,n); printf("最大公约数:%d\n",resul原创 2017-12-21 18:34:17 · 159 阅读 · 0 评论 -
递归算法2
1.假设元素序列存放在数组a中,数组a中n个元素的最大值可以通过将a[n-1]与前面n-1个元素最大者比较得到。数组元素中只有一个元素,最大者就是a[0],否则有,max(a,n)=(a[n-1]>max(a,n-1)?a[n-1]:max(a,n-1)。//求n个数中的最大值#include int max(int a[],int n);int main(){ int a[原创 2017-12-20 15:12:20 · 131 阅读 · 0 评论 -
递归算法1
递归的过程分为两个阶段:回归和递推。回推就是根据要求解的问题找到最基本的问题解,这个过程需要系统栈保存临时变量的值;递推是根据最基本问题的解得到所求问题的解,这个过程是释放系统栈的空间,直到得到问题的解。 1.n的阶乘求值,通过分析可知,当n=0或n=1,n的阶乘值为1,否则f(n)=n*f(n-1) #include long int Fact(int n);int main()原创 2017-12-20 14:49:11 · 231 阅读 · 0 评论 -
堆排序
堆排序是一种特殊的树形数据结构,其每个节点都有一个值,通常提到的堆都是指一棵完全二叉树,根节点的值小于(或大于)两个子节点的值,同时根节点的两个子树也分别是一个堆。堆排序主要包括两个过程:一是构建堆,二是交换堆顶元素与最后一个元素的位置。#include void DisArray(int a[],int n);void AdjustHeap(int a[],int s,int m);原创 2017-12-02 21:24:55 · 77 阅读 · 0 评论 -
归并排序2
#include #includevoid merging(int a[],int begin,int mid,int end){ int *tmp = (int *)malloc(sizeof(int)*(end - begin + 1)); int i,j,k; i = begin; j = mid + 1; k = 0; while(i原创 2017-12-01 23:39:57 · 91 阅读 · 0 评论 -
归并排序算法个人理解
如果把排序 当作层次不齐的线条 归并排序 和二分法很像 不断的递归完成分割 直到元素个数为1假设元素个数1有序 再和他右边的伙伴比较 合并 所以 合并的次数 logN 最终合并完成的数 再排序N次 复杂度为N*(logN) 如图分割原创 2017-11-30 14:51:01 · 121 阅读 · 0 评论 -
快速排序
快速排序是一种非常高效的排序方法,采用“分而治之”的思想,把大的拆分为小的,小的在拆分为更小的。原理是:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前部分的所有记录均比后部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均为有序为止。#include void Sort(int array[], int low, int原创 2017-12-01 23:36:30 · 94 阅读 · 0 评论 -
希尔排序
#include void ShellSort(int array[], int length){ int i, j; int h; int temp; for (h = length / 2; h > 0; h = h / 2)//步长变化 { for (i = h; i < length; i++) { temp = array[i]; for (j原创 2017-12-01 23:29:28 · 85 阅读 · 0 评论 -
简单选择排序
简单选择排序是一种简单直观的排序算法,他的基本原理是:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将记录与第一个记录的位置进行交换;接着对不包括第一个记录以外的其他记录进行第二轮排序,得到最小的记录并与第二个记录进行位置交换;重负该过程,直到进行比较的记录只有一个为止。#include void SelectSort(int *a, int n){ int i, j; int原创 2017-12-01 23:34:41 · 107 阅读 · 0 评论 -
排序算法复杂性
稳定排序与不稳定排序:假设 Ki = Kj ,且排序前序列中 Ri 领先于 Rj ;若在排序后的序列中 Ri 仍领先于 Rj ,则称排序方法是稳定的。若在排序后的序列中 Rj 仍领先于 Ri ,则称排序方法是不稳定的。算法的复杂性:体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度。辅助空间:辅原创 2017-12-01 23:19:10 · 291 阅读 · 0 评论 -
n阶奇数魔方
#include <stdio.h>#include <string.h>void rubikCube(int n) { int cube[n][n],k,i,j; for (i=0; i<n; i++) { //初始化数组赋0值 for (j=0; j<n; j++) { c...原创 2019-05-23 09:17:55 · 292 阅读 · 0 评论