------排序算法
这个异常不抛出
我只是不想把自己的担子放在父母肩膀上,仅此而已
展开
-
计数排序
#include using namespace std;const int MAXN = 100000;const int k = 1000; // rangeint a[MAXN], c[MAXN], ranked[MAXN];//时间复杂度O(n)int main(){ int n; cin >> n; for (int i = 0; i < n; ++原创 2016-06-13 13:31:26 · 195 阅读 · 0 评论 -
快速排序
#include #includeusing namespace std;inline void swap(int a[], int i, int j){ int t = a[i]; a[i] = a[j]; a[j] = t;}inline int partition(int a[], int p, int r){ int i = p;原创 2016-06-13 13:32:48 · 402 阅读 · 0 评论 -
直接插入排序
#include#include#includeusing namespace std;int main(){ int a[11],num; for(int i = 0; i < 10; i ++) scanf("%d",&a[i]); sort(a,a + 10); ///已经存在的序列是排序好的 scanf("%d",&num);原创 2016-06-13 13:33:35 · 214 阅读 · 0 评论 -
鸡尾酒排序(双向冒泡排序)
#include#includeusing namespace std;void CocktailSort(int *a,int nsize){//从小到大 int tail=nsize-1; for (int i=0;i<tail;) { for (int j=tail;j>i;--j) ///第一轮,先将最小的数据排到前面 {原创 2016-06-13 13:30:07 · 312 阅读 · 0 评论 -
选择法排序
#include#includeusing namespace std;int main(){//从小到大排序 int a[10]; for(int i = 0; i < 10; i ++) scanf("%d",&a[i]); int k,t; for(int i = 0; i < 9; i ++) { k =原创 2016-06-13 13:28:40 · 285 阅读 · 0 评论 -
冒泡排序
#include#includeusing namespace std;int main(){ int a[10]; for(int i = 0; i < 10; i ++) scanf("%d",&a[i]); int t; //实现过程 for(int i = 0; i < 9; i ++) for(int j原创 2016-06-13 13:27:09 · 398 阅读 · 0 评论 -
排序算法的稳定性分析
如何判断一个排序算法是否是稳定的? 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳原创 2016-07-31 13:18:05 · 430 阅读 · 0 评论 -
桶排序
还没整理原创 2016-06-13 13:38:59 · 217 阅读 · 0 评论 -
堆排序
还没整理原创 2016-06-13 13:38:33 · 225 阅读 · 0 评论 -
基数排序
还没整理原创 2016-06-13 13:38:07 · 231 阅读 · 0 评论 -
归并排序
/*归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。*/#include#includeusing namespace std;///将原创 2016-06-13 13:36:45 · 224 阅读 · 0 评论 -
希尔排序
#include#includeusing namespace std;void shellsort1(int a[], int n){ int i, j, gap; for (gap = n / 2; gap > 0; gap /= 2) //步长 for (i = 0; i < gap; i++) //直接插入排序 {原创 2016-06-13 13:35:47 · 189 阅读 · 0 评论 -
折半(二分)插入排序
#include#includeusing namespace std;void BinInsertSort(int a[], int n){ int key, left, right, middle; for (int i=1; i<n; i++) { key = a[i]; left = 0; right =原创 2016-06-13 13:35:02 · 271 阅读 · 0 评论 -
BFPRT算法查找第k大元素
线性查找算法,即从某n个元素中选取第k大(或者第k小)的元素,BFPRT算法可以保证在最坏的情况下仍然为线性时间复杂度O(n),该算法与快速排序及其相似,在BFPTR算法中,仅仅是改变了快速排序Partion中的pivot值的选取,在快速排序中,我们始终选择第一个元素或者最后一个元素作为pivot,而在BFPTR算法中,每次选择五分中位数的中位数作为pivot,这样做的目的就是使得划分原创 2016-08-01 11:38:13 · 2671 阅读 · 0 评论