
算法 经典算法
_刘小洋
Android开发
展开
-
插入排序算法+优化 (二分查找优化有序部分)C语言实现
直接插入排序 插入排序思想 直接插入排序思想是将待排序的数组看作两个部分:有序部分和无序部分,排序过程就是不断将无序部分的元素插入到有序部分合适的位置上,使有序部分元素不断增加而无序部分数据不断减少,直到数组全部有序为止。 假设数组A[0...n-1] (1)初始时,A[0]作为有序部分,A[1...n-1]为无序部分;原创 2014-11-09 13:49:58 · 1298 阅读 · 0 评论 -
归并排序 递归法 C语言 实现
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。原创 2014-11-13 22:32:29 · 983 阅读 · 0 评论 -
冒泡排序算法及其优化C语言实现
话不多说直接代码原创 2014-11-04 19:10:02 · 671 阅读 · 0 评论 -
各种排序算法的稳定性和时间复杂度小结
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。直接插入排序:O(n*n)选择排序:O(n*n)快速排序:平均时间复转载 2014-11-05 23:08:21 · 402 阅读 · 0 评论 -
选择排序极其优化
/思想:选择排序是指在数组A[n]中,刚开始有序数组中个数为0,首先遍历整个数组,找到最小的数跟A[0]交换//有序数组长度增加1.第二步从A[1]遍历到A[n],找出最小的数跟A[1]交换,如此反复直到第n-1个数。最后只剩//一个数,不用比较了。所以n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。////////////////////////////选择排原创 2014-11-04 23:50:44 · 440 阅读 · 0 评论 -
C语言编译器不检查数组下标越界 困扰的很长时间
C语言的编译器是不检查下标越界的,以前知道这个问题,可是没有想过是什么原因? 总结如下: 1,不检查下标是否越界可以有效提高程序运行的效率,因为如果你检查,那么编译器必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,这就会导致程序的运行速度下降,所以为了程序的运行效率,C/C++才不检查下标是否越界。 2,不检查下标是为了给程序员更大的空间,也为指针操作带来更转载 2014-11-06 18:53:56 · 2414 阅读 · 0 评论 -
经典插入排序算法分析 未优化的版本 C语言实现
直接插入排序1.插入排序思想 直接插入排序思想是将待排序的数组看作两个部分:有序部分和无序部分,排序过程就是不断将无序部分的元素插入到有序部分合适的位置上,使有序部分元素不断增加而无序部分数据不断减少,直到数组全部有序为止。 假设数组A[0...n-1] (1)初始时,A[0]作为有序部分,A[1...n-1]为无序部分;原创 2014-11-06 20:46:12 · 544 阅读 · 0 评论