摘要:2013年8月2日 15:41 快速排序是一种最坏情况运行时间为O(n*n),虽然这个最坏情况运行时间比较差,但快速排序通常都是用于排序的最 佳的实用选择,这是因为其平均性能相当好:期望的运行时间为O(nlgn),且O(nlgn)记号中隐含的常数因子很小。另 外,它还能够进行就地排序。 快速排序和合并排序一样,采用的都是分治思想。快排中利用该思想解决步骤为: 1、先从数组中取出一个数作为基数,基数的选择对排序效率的影响很大 2、分区,将比这个基数小的数全部放到它的左边,比基数大的数全部放到其右边 3、对左右两个区间重复第二步,直到每个区间只有一个数 下面结合代码来进一步理解快速排序。算法...
阅读全文
摘要:今天在看到网易里的算法导论的公开课,听到老外讲分治法时提到了下算一个数的N次方的可以通过二分思想来实 现,于是便想自己写个代码来实现它。虽然很简单,还是想写在博客中。一是可以加深自己的印象,以后遇到这类问 题时可以马上想到用二分来解决;二是可以方便以后的复习,再次用到的时候可以直接来这找模板。 [cpp]view plaincopyprint? #include usin...
阅读全文
摘要:堆排序是一种利用堆的性质进行的排序算法。所以学习堆排序之前先来简单介绍下堆。堆堆数据结构是一种数组对象,如图一所示,它可以被视为一颗完全二叉树。 图一树中的每个结点与数组中存放该结点值的那个元素对应。树的每一层都是填满的,最后一层可能除外。如果树的结点和数组的下标都从0开始,那么给定了某个结点的下标i,其父节点PARENT(i)、左儿子LEFT(i)和右儿子RIGHT(i)的下标可以简...
阅读全文
摘要:插入排序: 插入排序的大概步骤是从第二个元素开始遍历,当遍历到第N个元素时,前面N - 1个元素都已经排好序了,然后查找 前面排好序的N - 1个元素,将第N个元素插入到适当的位置。也就是说插入排序实现有两个关键点:如何保证遍历到 当前元素时,前面的元素是已经排好序的、怎么将元素插入到适当的位置。下面就以将元素升序排序来说明。 首先,先来解决第一个问题,即保证遍历到当前元素时,前面的...
阅读全文
摘要:#include #include void bubble_sort(int a[], int size);void print_array(int a[], int size);int main(){int size;int i;int *a;printf("input the size of array: size = \n");scanf("%d",&size);a = (int *)mal...
阅读全文