摘要:
#include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define SUCCESS 1 #define UNSUCCESS 0 #define dataNum 5 int i = 0; int dep = 0; char data[dataNum] ... 阅读全文
摘要:
// 希尔排序:每一轮按照事先决定的间隔进行插入排序,间隔会依次缩小,最后一次一定要是1。 template void shell_sort(T array[], int length) { int h = 1; while (h = 1) { for (int i = h; i = h && array[j] < array[j - h]; j -= h) { ... 阅读全文
摘要:
/* (有序区,无序区)。在无序区里找一个最小的元素跟在有序区的后面。对数组:比较得多,换得少。 选择排序思路: 1. 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 2. 从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾 3. 以此类推,直到所有元素均排序完毕 */ // 选择排序 void SelectionSort(vector& v) { i... 阅读全文
摘要:
// 基数排序:一种多关键字的排序算法,可用桶排序实现。 int maxbit(int data[], int n) //辅助函数,求数据的最大位数 { int maxData = data[0]; ///= p) { //p *= 10; // Maybe overflow maxData /= 10; ++d; ... 阅读全文
摘要:
/* (小数,基准元素,大数)。在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。 快速排序思路: 1. 选取第一个数为基准 2. 将比基准小的数交换到前面,比基准大的数交换到后面 3. 对左右区间重复第二步,直到各区间只有一个数 */ // -------------------------------------... 阅读全文
摘要:
// 归并排序:把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。可从上到下或从下到上进行。 /***************** 迭代版 *****************/ //整數或浮點數皆可使用,若要使用物件(class)時必須設定"小於"( void merge_sort(T arr[], int len) { T* a = arr; T* b = ... 阅读全文
摘要:
/* (有序区,无序区)。把无序区的第一个元素插入到有序区的合适的位置。对数组:比较得少,换得多。 插入排序思路: 1. 从第一个元素开始,该元素可以认为已经被排序 2. 取出下一个元素,在已经排序的元素序列中从后向前扫描 3. 如果该元素(已排序)大于新元素,将该元素移到下一位置 4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 5. 将新元素插入到该位置后 6. 重复步骤2... 阅读全文
摘要:
//插值查找 int InsertionSearch(int a[], int value, int low, int high) { int mid = low+(value-a[low])/(a[high]-a[low])*(high-low); if(a[mid]==value) return mid; if(a[mid]>value) ... 阅读全文
摘要:
#include #include using namespace std; // 堆排序:(最大堆,有序区)。从堆顶把根卸出来放在有序区之前,再恢复堆。 void max_heapify(int arr[], int start, int end) { //建立父節點指標和子節點指標 int dad = start; int son = dad * 2 + 1;... 阅读全文
摘要:
// 斐波那契查找 #include "stdafx.h" #include #include using namespace std; const int max_size=20;//斐波那契数组的长度 /*构造一个斐波那契数组*/ void Fibonacci(int * F) { F[0]=0; F[1]=1; for(int i=2;iF[k]-1)... 阅读全文
摘要:
/***************** 计数排序:统计小于等于该元素值的元素的个数i,于是该元素就放在目标数组的索引i位(i≥0)。 计数排序基于一个假设,待排序数列的所有数均为整数,且出现在(0,k)的区间之内。 如果 k(待排数组的最大值) 过大则会引起较大的空间复杂度,一般是用来排序 0 到 100 之间的数字的最好的算法,但是它不适合按字母顺序排序人名。 计数排序不是比较排序,排序的速... 阅读全文
摘要:
#include #include #include using std::vector; /***************** 桶排序:将值为i的元素放入i号桶,最后依次把桶里的元素倒出来。 桶排序序思路: 1. 设置一个定量的数组当作空桶子。 2. 寻访序列,并且把项目一个一个放到对应的桶子去。 3. 对每个不是空的桶子进行排序。 4. 从不是空的桶子里把项目再放回原来的序列中。 假... 阅读全文
摘要:
/* 二叉搜索树的查找算法: 在二叉搜索树b中查找x的过程为: 1. 若b是空树,则搜索失败,否则: 2. 若x等于b的根节点的数据域之值,则查找成功;否则: 3. 若x小于b的根节点的数据域之值,则搜索左子树;否则: 4. 查找右子树。 */ // 在根指针T所指二叉查找树中递归地查找其关键字等于key的数据元素,若查找成功, // 则指针p指向該数据元素节点,并返回TRUE,否则指... 阅读全文
摘要:
/* (无序区,有序区)。从无序区通过交换找出最大元素放到有序区前端。 选择排序思路: 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 */ ... 阅读全文
摘要:
// 二分查找(折半查找):对于已排序,若无序,需要先排序 // 非递归 int BinarySearch(vector v, int value) { if (v.size() value) high = mid - 1; else low = mid + 1; } return -1; } // 递归 int BinarySearch2(vector v, in... 阅读全文