首页 > 编程语言 >复习排序算法

复习排序算法

时间:2024-09-11 17:06:57浏览次数:9  
标签:排序 复习 int 代码 100005 算法 using include

备战acm校队第二天。
实惨,排序学了好几年了,还是没有熟练,意难平啊。特此打开oi-wiki,从头到尾把排序敲一遍。

选择排序
比较简单。就是把数组里最大数找出来放到最后,然后再把第二大的找出来放在倒数第二位,依次类推,排序就结束了。
注:TMD,Dev-C++原来不能把中文注释在代码,不然拷贝出来会乱码。所以选择排序我不注释了

点击查看代码
#include<bits/stdc++.h> 
int a[100005],n;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=n;i>=1;--i)
	{
		for(int j=1;j<=i;j++)
		{
			if(a[j]>a[i]) swap(a[j],a[i]); 
		}
	}
	for(int i=1;i<=n;++i)
	{
		printf("%d ",a[i]);
	}
}

冒泡排序
每一个位置的数都与后面的数比较,只要后面小于前面,就交换,保持单调递增。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int a[100005],n;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=n-1;++j)
		{
			if(a[j]>a[j+1]) swap(a[j],a[j+1]); 
		}
	}/*每一次操作都能保证未被排序中最大的数被交换到最后一位(相对最后一位)*/
	for(int i=1;i<=n;++i)
	{
		printf("%d ",a[i]);
	}
}

插入排序
以把小的往前插为例:每当找到小的数,就把这个数存下来,然后把这个数前面比它大的往后移,空出一个位置放入这个数。如果没有比它大的,也就没法移动了。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int a[100005],n;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=n;++i)
	{
		int k=a[i];
		int j=i-1;
		while(j>=0&&a[j]>k)//移动过程
		{
			a[j+1]=a[j];
			j--;
		}
		a[j+1]=k;
	}
	for(int i=1;i<=n;++i)
	{
		printf("%d ",a[i]);
	}
}

选择排序
随便找一个数x,从左到右找一个比x大的数,然后再从右往左找一个比x小的数,如果不满足递增则交换,重复多次直至左边超过右边。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int a[10005],n;
void quicksort(int l,int r)
{
	int mid=a[l+r>>1];
	int i=l,j=r;
	do
	{
		while(a[i]<mid) i++;
		while(mid<a[j]) j--;
		if(i<=j)
		{
			swap(a[i],a[j]);
			i++;
			j--;
		}
	}while(i<=j);
	if(l<j) quicksort(l,j);
	if(i<r) quicksort(i,r);
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	quicksort(1,n);
	for(int i=1;i<=n;i++)
	{
		printf("%d ",a[i]);
	}
}

我累了,还有的排序明天再说吧。

标签:排序,复习,int,代码,100005,算法,using,include
From: https://www.cnblogs.com/Fire-Colder/p/18408510

相关文章

  • CheckSum算法--又名累加和校验算法
    校验和(Checksum)是网络协议使用的数据错误检测方法,并且被认为比LRC(纵向冗余校验,LongitudinalRedundancyCheck,LRC),VRC和CRC(循环冗余校验(CyclicRedundancyCodes,CRC))更可靠。此方法在发送方使用校验和生成器,在接收方使用校验和校验器。累加和校验算法的实现发送方:对要数据累加,得......
  • 前端算法(持续更新)
    1、最大的钻石1楼到n楼的每层电梯口都放着一个钻石,钻石大小不一。你从电梯1楼到n楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能最大的钻石?解题思路:这是一个经典的动态规划问题,可以使用贪心算法来解决。以下是解决这个问题的思路:定义问题从1楼到n楼,每层楼电......
  • 冒泡排序理解
    1.1思路冒泡排序是一种简单的排序方法。基本思路是通过两两比较相邻的元素并交换它们的位置,从而使整个序列按照顺序排列。该算法一趟排序后,最大值总是会移到数组的最后面,那么接下来就不用再考虑这个最大值。一直重复这样的操作,最终就可以得到排序完成的数组。这种算法是稳......
  • 前端常见算法题
    1、去除字符串中出现次数最少的字符,不改变原字符串的顺序实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。“ababac”——“ababa”“aaabbbcceeff”——“aaa......
  • 【大模型理论篇】ToB的大模型系统非常有必要引入搜索推荐算法能力(回顾BPR、W&D、ALS等
    1.背景和思考              上周2024上海外滩大会如约而至,各种大咖云集,多种观点思想碰撞,带来很多新的启发。我个人比较关注大模型和隐私计算相关的内容,因此重点听了相关老师带来的行业前沿进展和深度思考。有两位老师的观点,特别认同,一位是百川智能的王小川......
  • 代码随想录算法训练营Day1
    目录704.二分查找 27.移除元素977.有序数组的平方 704.二分查找 分类:左闭右闭、左闭右开Tips:1.循环条件:左闭右闭:左索引<=右索引左闭右开:左索引<右索引2.循环操作:处理元素>目标值:左闭右闭:右索引=折半索引-1左闭右开:右索引=折半索引classSolution{......
  • 互联网算法备案必要性+攻略全流程详解【附件+流程】
    一、算法备案的重要性算法备案是指相关企业或组织向有关部门提交其使用的算法的相关信息,以接受监管和审查。这一举措有助于确保算法的公正性、透明性和合法性,保护用户的权益,促进数字经济的健康发展。算法备案必要性强制性例如,在推荐系统中,如果算法存在偏见或歧视,可能会导致......
  • 算法与数据结构——图的基础操作及图的遍历(广度优先与深度优先)
    图的实现基于邻接矩阵的实现给定一个顶点数量为n的无向图:初始化:传入n个顶点,初始化长度为n的顶点列表vertices,使用O(n)时间;初始化n*n大小的邻接矩阵adjMat,使用O(n2)时间。添加或删除边:直接在邻接矩阵中修改指定的边即可,使用O(1)时间。而由于是无向图,因此需要同时更新两个......
  • 【大数据】分布式存储压缩算法
    目录一、分布式存储压缩算法概述二、分布式存储压缩算法优缺点和改进2.1 分布式存储压缩算法优点2.2分布式存储压缩算法缺点2.3 分布式存储压缩算法改进三、分布式存储压缩算法实现3.1 分布式存储压缩算法C语言实现3.2 分布式存储压缩算法JAVA实现3.3 分布式存......
  • 贪心算法day28|买卖股票的最佳时机、55. 跳跃游戏、1005. K 次取反后最大化的数组和
    贪心算法day28|买卖股票的最佳时机、55.跳跃游戏、1005.K次取反后最大化的数组和122.买卖股票的最佳时机II55.跳跃游戏1005.K次取反后最大化的数组和122.买卖股票的最佳时机II给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一......