首页 > 编程语言 >【算法】排序

【算法】排序

时间:2024-02-12 20:11:21浏览次数:26  
标签:int 元素 bucket 点击 算法 数组 排序

冒泡排序

思想:每一轮确定一个最大值移到最右边。

点击查看代码
for(int i = n; i >= 1; i --) {
		for(int j = 1; j < i; j ++) {
			if(a[j] > a[j + 1]) swap(a[j],a[j + 1]);
		}
	}

选择排序

思想:与冒泡相似。

点击查看代码
for(int i = n; i >= 1; i --) {
		int max_id = 0;
		for(int j = 1; j <= i; j ++) {
			if(a[j] > a[max_id]) max_id = j;
		}
		swap(a[i],a[max_id]);
	}

插入排序

思想:将待确定元素插到已排序序列中。

点击查看代码
	for(int i = 2; i <= n; i ++) {
		int val = a[i],j;
		for(j = i; i > 1 && val < a[j - 1]; j --) {
			a[j] = a[j - 1];
		}
		a[j] = val;
	}

快速排序

思想:基于分治法,将一个数组分为两个子数组,其中一个数组的所有元素都小于另一个子数组的元素,然后递归地对这两个数组进行排序。

点击查看代码
void quick_sort(int q[], int l, int r)
{
    if (l >= r) return;

    int i = l - 1, j = r + 1, x = q[l + r >> 1];
    while (i < j)
    {
        do i ++ ; while (q[i] < x);
        do j -- ; while (q[j] > x);
        if (i < j) swap(q[i], q[j]);
    }

    quick_sort(q, l, j);
    quick_sort(q, j + 1, r);
}

归并排序

思想:与快速排序类似,也是基于分治法地排序方法。将一个数组分为两个子数组,分别排序再合并。

点击查看代码
void merg(int q[], int l, int r)
{
    if (l >= r) return;
    
    int mid = (l + r) >> 1;
    merg(q, l, mid);
    merg(q, mid + 1, r);
    
    int i = l, j = mid + 1, k = 0;
    while(i <= mid && j <= r) {
    	if(q[i] < q[j]) tmp[k ++] = q[i ++];
    	else tmp[k ++] = q[j ++];
	}
	while(i <= mid) tmp[k ++] = q[i ++];
	while(j <= r) tmp[k ++] = q[j ++];
	for(i = l,j = 0; i <= r; i++, j++) q[i] = tmp[j];
}

桶排序

思想:桶排序(Bucket sont)是一种非比较的排序算法。桶排序采用了一些分类和分治的思想,把元素的值域分成若干段,每一段对应一个桶。在排序的时候,首先把每一个元素放到其对应的桶中,再对每一个桶中的元素分别排序,再按顺序把每个桶中的元素依次取出,合并成最终答案。

点击查看代码
vector<int> bucket[MAXN];
int main() {
    cin >> n;
    for (int i = 1; i <= n; i ++ ) {
        int x;
        cin >> x;
        bucket[x / 1000].push_back(x);
    }
    for (int i = 0; i < MAXN; i ++ ) {
        sort(bucket[i].begin(), bucket[i].end());
    }
    for (int i = 0; i < MAXN; i ++ ) {
        for (auto item: bucket[i]) {
            cout << item << " ";
        }
    }
    cout << endl;
}

标签:int,元素,bucket,点击,算法,数组,排序
From: https://www.cnblogs.com/zc-study-xcu/p/18012706

相关文章

  • 2024牛客寒假算法基础集训营2个人补题题解(K、D)
    比赛链接:2024牛客寒假算法基础集训营2K、TokitsukazeandPassword(easy)题面看着很难实际上只要暴力的东西,赛时看了眼题面就溜了血亏爆搜,枚举\(abcd\)和_可能的值,枚举的情况只有\(9*8*7*6*9=27216\)种。判断按照枚举出的对应值排列出的密码是否满足条件,满足就\(ans++\)写完......
  • [数据结构] 串与KMP算法详解
    写在前面今天是农历大年初三,祝大家新年快乐!尽管新旧交替只是一个瞬间,在大家互祝新年快乐的瞬间,在时钟倒计时数到零的瞬间,在烟花在黑色幕布绽放的瞬间,在心底默默许下愿望的瞬间……跨入新的一年,并不意味了一切都会朝着更美好,也没有什么会从天而降,我们赋予了它这份意义,让它自然裹......
  • 有关素数的算法
    一、素性判断素数,又叫质数,是指一个整数,除了1和本身之外,还有其它的因数(注意:1不是素数)。因此,对于一个整数\(n\),我们只要检测\([2,n-1]\)能否整除\(n\)。整除的定义:\(\exist\)\(a,b,k\in\mathbb{Z}\),使得\(a=kb\),则称\(b\)整除\(a\),记\(b\)\(|\)\(a\)。若\(......
  • 我在代码随想录|写代码| 贪心算法 | 理论基础, 455.分发饼干, 376. 摆动序列,53. 最大
    学习目标:博主介绍:27dCnc专题:数据结构帮助小白快速入门......
  • 在k8S中,Scheduler使用哪两种算法将Pod绑定到worker节点?
    在Kubernetes(k8S)中,Scheduler使用两种主要的算法阶段来决定将Pod绑定到哪个worker节点上:预选算法(Predicates)预选阶段的主要目标是过滤掉不满足调度条件的节点。Scheduler会根据一系列预定义的预选策略对所有可用节点进行筛选。这些策略可能包括但不限于:检查节点上的资源是否......
  • 2024牛客寒假算法基础集训营2 补题
    2024牛客寒假算法基础集训营2补题A.TokitsukazeandBracelet签到模拟参考代码:#include<bits/stdc++.h>usingnamespacestd;#definefffirst#definesssecond#defineebemplace_back#defineall(u)u.begin(),u.end()#defineendl'\n'#definedebug(x)cout......
  • 各大排序的模板
    1.冒泡排序 1for(i=n;i>=1;--i)2{3for(j=1;j<=i;++j)4{5if(a[j]>a[j+1])6{7swap(a[j],a[j+1]);8}9}10}   2.快速排序1.懒人函数 1sort(a+1,a+n+1);   2.正常的1vo......
  • 补基础题(排序)
    2299--Ultra-QuickSort(poj.org)#include<iostream>//归并排序#include<cstring>usingnamespacestd;typedeflonglongll;constintN=500010;inta[N],tmp[N],ans;voidmerge_(lll,llmid,llr){inti=l,j=mid+1,t=0;while(i<=mid&......
  • UUID算法:独一无二的标识符解决方案
    引言在分布式系统和大数据环境下,唯一标识符的生成和管理是一项关键任务。UUID(UniversallyUniqueIdentifier)算法应运而生,成为了解决重复数据和标识符冲突的有效工具。本文将探讨UUID算法的优势和劣势,分析其在分布式系统、大数据环境以及其他领域中的应用,同时给出Python完整示例......
  • 文心一言 VS 讯飞星火 VS chatgpt (198)-- 算法导论14.3 6题
    六、用go语言,说明如何来维护一个支持操作MIN-GAP的一些数的动态集Q,使得该操作能给出Q中两个最接近的数之间的差值。例如,Q=(1,5,9,15,18,22),则MIN-GAP返回18-15=3,因为15和18是Q中两个最接近的数。要使得操作INSERT、DELETE、SEARCH和MIN-GAP尽可能高效,并分析它们的运行时间。文心一言,代......