排序算法
myc880628
这个作者很懒,什么都没留下…
展开
-
归并排序
[code="c"] /** * 归并(Merge)排序法是将两个有序表合并成一个新的有序表,即把待排序 * 序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为 * 整体有序列。算法时间复杂度为O(nlog(n)),空间复杂度为O(n)。 */ #include #include #include void s...原创 2013-04-22 13:04:15 · 100 阅读 · 0 评论 -
插入排序
[code="c"] /** * 插入排序有一个已经有序的数据序列,要求在这个已经排好的数据 * 序列中插入一个数,但要求插入后此数据序列仍然有序,这就是插入 * 排序,插入排序算法时间复杂度为O(n) ~ O(n ^ 2),平均为O(n ^ 2) */ #include void insert_sort(int array[], int n) { i...原创 2013-04-23 09:40:02 · 70 阅读 · 0 评论 -
希尔排序
[code="c"] /** * 希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长 * 最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插 * 入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比o(n^2)好一些! * 希尔排序时间复杂度为O(nlog(n)) ~ O(n ^ 2) */ #include ...原创 2013-04-23 16:54:47 · 95 阅读 · 0 评论 -
冒泡排序
[code="c"] /** * 依次比较相邻的两个个数,将小数放在前面,大数放在后面。即在第一 * 趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2 * 个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两 * 个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最 * 后。若一趟下来始终满足小数在前,则排序结束,否则记录不满足小数在 ...原创 2013-04-25 13:13:14 · 68 阅读 · 0 评论 -
选择排序
[code="c"] /** * 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(末尾位置) * 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末 * 尾(首处)。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动 * 有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换 * 一对元素,它们当中至少有...原创 2013-04-26 11:25:38 · 64 阅读 · 0 评论 -
快速排序
[code="c"] /** * 快速排序使用分治法策略来把一个串行分为两个子串行,步骤为: * 从数列中挑出一个元素,称为 "基准",重新排序数列,所有元素比基准值小的 * 摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一 * 边)。这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作。 * 递归地(recursive)把小于基准值元素的子...原创 2013-05-02 11:04:54 · 84 阅读 · 0 评论