摘要: C++与C的不同 C++从诞生之初就号称和C是兼容的,正是这种兼容,使C++得以迅猛发展,然而也正是这种兼容,让C++背上了沉重的历史包袱。且不论其利弊,让我们来看看C++在兼容C的那部分中,与C语言有什么不同。1. bool 在C语言中,没有bool类型,我们通常的做法是: 1: #ifnd... 阅读全文
posted @ 2014-09-14 17:12 Newerth 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 待 阅读全文
posted @ 2012-06-01 08:31 Newerth 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 希尔排序是直接插入排序算法的一种优化,其核心思想是分组进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。 稳定性:不稳定 实现: 1: void 2: shell_sort(int a[], int n) 3: { 4: int i, j, gap; 5: 6:... 阅读全文
posted @ 2012-06-01 08:31 Newerth 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 快速排序主要使用分治法的思想,步骤为: 1、从数列中挑出一个元素作为基准。 2、重新排列所有元素,所有比基准小的元素放在基准之前,比基准大的元素放在基准之后(等于基准的元素可以放在任意一边)。操纵结束后基准元素所在的位置就是排序后它应该在的位置。 3、递归地对基准左边的子数列和基准右边的子数列分别进行第1、2步操作,直至子数列的元素个数为1。 时间复杂度:O(n * logn) 稳定性:... 阅读全文
posted @ 2012-06-01 08:30 Newerth 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 通常所说的堆是指二叉堆,其定义为: n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系时,被称为堆:ki <= k2i 并且 ki <= k2i+1 , 或者 ki >= k2i 并且 ki >= k2i+1。 若将此序列看成是一个完全二叉树,则二叉树中所有非叶子结点的值都不大于(或者不小于)其左、右孩子结点的值,父结点的值比较大的叫做最大堆(或者大根堆),父结点比较小的叫做最小堆(或者... 阅读全文
posted @ 2012-06-01 08:30 Newerth 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 归并排序的核心思想是将两个已经排序的序列合并成一个序列,那如何得到两个已经排序的序列呢?我们知道, 如果一个序列只有一个元素,那该序列是已经排序的,这样我们就可以利用分治的思想,将未排序的序列划分成更小的序列,只到我们可以很方便的对小序列进行排序(比如划分到序列只有一个元素, 或者序列很小可以方便的使用其它排序算法进行排序),然后再将小序列逐次合并,得到最后的排序结果。 实现: ... 阅读全文
posted @ 2012-06-01 08:26 Newerth 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 选择排序是一种简单直观的排序算法,其核心思想是:遍历数组,从未排序的序列中找到最小元素,将其放到已排序序列的末尾。时间复杂度:O(n^2)稳定性 :不稳定 1: /* 2: * @brief selection sort 3: */ 4: void 5: selection_sort(int a[], int n) 6: { 7: int i, j, min, tmp; 8: 9: for (i = 0; i < n - 1; ++i) { 10: min = i; 11: for (j... 阅读全文
posted @ 2012-05-30 20:44 Newerth 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 直接插入排序是一种比较容易理解的排序算法,其核心思想是遍历数组,将数组中的元素逐个插入到已排序序列中。时间复杂度:O(n^2)稳定性:稳定实现: 1: /* @brief insetion sort 2: * insert the new element to the sorted subarray 3: */ 4: void 5: insertion_sort(int a[], int n) 6: { 7: int i, j, num; 8: 9: for (i = 1; i < n; ++i) { 10: num ... 阅读全文
posted @ 2012-05-30 20:05 Newerth 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序是最基本的排序算法之一,其核心思想是从后向前遍历数组,比较a[i]和a[i-1],如果a[i]比a[i-1]小,则将两者交换。这样一次遍历之后,最小的元素位于数组最前,再对除最小元素外的子数组进行遍历。进行n次(n数组元素个数)遍历后即排好序。外层循环为n次,内层循环分别为n-1, n-2…1次。时间复杂度: O(n^2)稳定性:稳定实现: 1: /* @brief bubble sort 2: * move the smallest element to the front in every single loop 3: */ 4: void 5: bub... 阅读全文
posted @ 2012-05-30 19:57 Newerth 阅读(429) 评论(0) 推荐(1) 编辑
摘要: 如何判断一个数是2的幂,主要是要找出2的幂次方的数的特点。我们知道,1个数乘以2就是将该数左移1位,而2的0次幂为1, 所以2的n次幂(就是2的0次幂n次乘以2)就是将1左移n位, 这样我们知道如果一个数n是2的幂,则其只有首位为1,其后若干个0,必然有n & (n - 1)为0。(在求1个数的二进制表示中1的个数的时候说过,n&(n-1)去掉n的最后一个1)。因此,判断一个数n是否为2的幂,只需要判断n&(n-1)是否为0即可。实现: 1: bool powerof2(unsigned int n) 2: { 3: return ((n & (n -1)) = 阅读全文
posted @ 2012-05-11 08:37 Newerth 阅读(4735) 评论(0) 推荐(1) 编辑