摘要:
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。设数组为a[0…n-1]。1.初始时,数组全为无序区为a[0..n-1]。令i=02.在无序区a[i…n-1]中选取一个最小的元素,将其与a[i]交换。交换之后a[0…i]就形成了一个有序区。3.i++并重复第二步直到i==n-1。排序完成。直接选择排序无疑是最容易实现的,下面给出代码:void Selectsort(inta[], intn){inti,j,nMinIndex;for (i 阅读全文
摘要:
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。设数组为a[0…n-1]。1.初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12.将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。3.i++并重复第二步直到i==n-1。排序完成。下面给出严格按照定义书写的代码(由小到大排序):void Insertsort1(inta[], intn){inti,j,k;for (i= 1;i<n;i++){//为a[i]在前面的a[0...i-1 阅读全文
摘要:
冒泡排序是非常容易理解和实现,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。按照定义很容易写出代码://冒泡排序1void BubbleSort1(inta[], intn){inti,j;for (i= 0;i<n;i++)for (j= 1;j<n-i;j++)if (a[j- 1] >a[j])Swap(a[j- 1],a[j]);}下面对其进行优化, 阅读全文
摘要:
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。下图展示一个最小堆:由于其它几种堆(二项式堆,斐波纳契堆等)用的较少,一般将二叉堆就简称为堆。堆的存储一般都用数组来表示堆,i结点的父结点下标就 阅读全文
摘要:
软件项目成本估算计算步骤是:估算出项目的功能点数量 -> 项目开发工作量(人月)-> 开发费用/人月 -> 总开发费用。其中比较困难的是项目的功能点数量计算,小弟并非专家,团队中也没有资深人士,对此真是举步维艰,但最终还是摘下了果实。 阅读全文
摘要:
文件与链表的结合使用,这是学期末自己论文的题目,虽然不是特别好,但的确花了一番心血。设计的函数满足要求(有些还是有些瑕疵),呵呵 阅读全文
摘要:
when I joined in the Software Association, the leader give me a problem which is to use the MFC, but I never learn it. Though, I finished it in three days. 阅读全文