摘要: [Leetcode题解] 1 Tow Sum-----------------------> Given an array of integers, find two numbers such that they add up to a specific target number.> The fu... 阅读全文
posted @ 2015-06-30 19:21 缓冲区溢出 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 这一题大意如下: 一个冰箱上有4*4共16个开关,改变任意一个开关的状态(即开变成关,关变成开)时,此开关的同一行、同一列所有的开关都会自动改变状态。要想打开冰箱,要所有开关全部打开才行。 输入:一个4×4的矩阵,+表示关闭,-表示打开; 输出:使冰箱打开所需要执行的最少操作次数,以及所操作... 阅读全文
posted @ 2014-07-28 17:10 缓冲区溢出 阅读(3730) 评论(2) 推荐(4) 编辑
摘要: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define MAXN 1000000 4 void Matrix_Chain_Order(int * p, int * s, int N) 5 { 6 int n = N - 1; 7 int m[N][N]; 8 for(int i = 1; i <= n; i++) 9 {10 m[i][i] = 0; 11 } 12 for(int l = 2; l <= n; l+... 阅读全文
posted @ 2012-11-25 18:39 缓冲区溢出 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 1 #include<stdio.h> 2 #include<stdlib.h> 3 void Fastest_Way(int * a, int n, int * t, int * e, int * x) 4 {//定义一个二维数组a[2][n],二维数组t[2][n-1] 5 //定义一位数组e[2],x[2]; 6 int f[2][n]; 7 int l[2][n]; 8 int F, L; 9 f[0][0] = e[0] + *(a); //开始进入装配线1 10 f[1][0] = e[1] + *(a + n); /... 阅读全文
posted @ 2012-11-22 23:53 缓冲区溢出 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 希尔排序希尔排序又称为缩小增量排序,它是直接插入排序的一种改进,它的基本思想是:将整个待排记录序列分割成若干个子序列,然后分别对子序列进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行直接插入排序。上面是数据结构数上话,看起来很绕人,其实很简单,就是一种插入排序,只是如何选取子数列:跳跃选取,每隔一个增量k选取一个数,这些数构成一个子序列(相当于数学中的同余)。一般来说每进行一次shell排序,k的值变为一半,直到为1。 1 void shell_sort(int * A, int n) 2 { 3 int i, j; 4 int temp; //存放数据的变... 阅读全文
posted @ 2012-11-22 00:14 缓冲区溢出 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 计数排序计数排序不同于前面所有的排序,它并不是一种比较排序。计数排序假设输入元素中每一个都是介于0到k之间的整数,计数排序运行时间是O(n);计数排序的基本思想是:对每一个输入的元素x,统计出小于x的元素个数,然后可以把x直接放到输出数组中。例如有5个元素小于x,那么x就是数组中第6个元素B[5]。 1 void Counting_Sort(int * A, int * B,int n, int k) 2 {//A是原始数组,B用来存数排序后的结果,n是数组长度,k是所有元素范围上限 3 int C[k+1]; 4 for(int i = 0; i < k; i++) 5... 阅读全文
posted @ 2012-11-21 23:02 缓冲区溢出 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 堆排序堆排序是一种原地排序,利用数据结构中的堆来管理数据。(二叉)堆数据结构是一组数组对象,它可以被视为一个完全二叉树,树的每个节点与数组中存放该结点值得那个元素对用。性质:①父节点:i 左孩子::2*i 右孩子:2*i + 1 (注意:在计算机中可以用移位完成,左孩子是i<<1,右孩子是(i<<1) + 1)②二叉堆有两种:最大堆和最小堆,这里以最大堆为例:除了根以外的每个结点i,有A[parent[i]] >= A[i],即每个结点的值最多与其父结点一样大。③当用数组表示存储了n个元素的堆时,叶子结点的下标是[n/2]+1, [n/2]+2,......n。堆 阅读全文
posted @ 2012-11-21 21:51 缓冲区溢出 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 归并排序归并排序,又称为合并排序,它是把待排序序列分为若干个子序列,每个子序列是有序的,然后再把有序子序列合并为整体有序序列。使用的D&C的思想:分解:将n个元素分解为各含n/2个元素的子序列;解决:用合并排序法对两个子序列进行递归的排序;合并:合并两个已经排好的子序列以得到正确结果。归并排序的速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。其最好,最坏,平均时间复杂度都是O(nlogn)。 1 void Merge(int A[], int p, int q, int r)//对两个已经排好序的子数列进行合并 2 { 3 int n1 = q -.. 阅读全文
posted @ 2012-11-21 13:23 缓冲区溢出 阅读(516) 评论(0) 推荐(0) 编辑
摘要: 选择排序选择排序是一种不稳定的排序方式选择排序的思想是:n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:①初始状态:无序区为R[1..n],有序区为空。②第1趟排序 在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。③第i趟排序 第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的. 阅读全文
posted @ 2012-11-20 23:13 缓冲区溢出 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 快速排序 快速排序是一种很有效的排序方法,它是对起泡排序的一种改进,它的基本思想是:通过一趟排序,将待排记录分成两个独立的部分,其中一部分均比一个关键字小,另一部分均比这个关键字大。然后使用递归,分别对这两部分继续进行快速排序。 具体是怎样将待排记录分成两个部分的呢?以前在论坛上看过一篇文章,感觉说的很好,叫“挖坑填土”法。 ①:选取一个关键字(可以选择序列的第一个记录为关键字),把它挖出,这个地方就留下了一个坑。②:然后从序列的后面搜索,当找到一个比关键字小的数时,将这个小的数挖出,填入前面的坑中。③:然后从序列的前面搜索,当找到一个比关键字大的数时,将这个大数挖出,填入刚刚小数留下的... 阅读全文
posted @ 2012-11-20 22:51 缓冲区溢出 阅读(491) 评论(0) 推荐(0) 编辑