![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序
lorde_mimi
这个作者很懒,什么都没留下…
展开
-
堆的基本操作与堆排序
堆专题基本操作向下调整向上调整堆排序堆是一颗完全二叉树,树中每个结点的值都不小于(或不大于)其左右孩子的值。基本操作向下调整完全二叉树叶子结点的个数为n/2(向上取整),在[1,n/2]范围内为非叶子结点。倒着枚举能够保证每个结点都是以其为根结点的子树中权值最大的结点,父结点一旦发现子结点的权值都比自己小就可以终止向下调整,这样downadj()才是合理的。//high一般为堆最后一个元...原创 2019-09-04 11:52:18 · 101 阅读 · 0 评论 -
选择排序
基本思想:每次从待排序部分选择最小的元素,与该部分的第一个元素交换。void selectsort(){ for(int i = 1; i <= n; i++){ int k = i; for(int j = i; j <= n; j++){ if(a[j] < a[k]){ k = j; } } int temp = a[i]; a[...原创 2019-09-05 11:19:13 · 90 阅读 · 0 评论 -
插入排序
基本思想:每一趟都将待排序部分的第一个元素插入到有序部分的合适位置。int a[maxn], n; //n为元素个数void selectsort(){ for(int i = 2; i <= n; i++){ int temp = a[i], j = i; while(j > 1 && temp < a[j-1]){ a[j] = a[j-...原创 2019-09-05 11:25:10 · 106 阅读 · 0 评论 -
归并排序
递归实现const int maxn = 110;void merge(int a[], int l1, int r1, int l2, int r2){ int i = l1, j = l2; int temp[maxn], index = 0; while(i <= r1 && j <= r2){ if(a[i] <= a[j]){ tem...原创 2019-09-05 14:30:42 · 139 阅读 · 0 评论 -
快速排序C++实现
//添加头文件stdlib.h和time.h, main()函数一开头加上srand((unsigned)time(NULL)) int randpartition(int a[], int left, int right){ int p = (int)round(1.0 * rand() / RAND_MAX * (right - left) + left); //四舍五入 swap(a[...原创 2019-09-05 14:52:33 · 179 阅读 · 0 评论