首页 > 编程语言 >[c++][笔记]浅谈几种排序方式---冒泡排序,选择排序,桶排序

[c++][笔记]浅谈几种排序方式---冒泡排序,选择排序,桶排序

时间:2024-09-07 20:36:06浏览次数:7  
标签:index 排序 浅谈 int 元素 冒泡排序 include

 

一、algorithm里的sort函数 

#include <cstdio> // 数据小的可以用iostream
#include <algorithm> // 不能忘记算法库,否则会编译失败。
using namespace std;
int main()
{
    int n;
    scanf("%d", &n);
    int a[n+5] = {};
    for (int i = 1; i <= n; i++){
        scanf("%d", &a[i]);
    }
    sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; i++){
        printf("%d", a[i]);
    }
    return 0;
}

二、冒泡排序


#include<iostream> //包含输入输出头文件
#include<cmath>
using namespace std; //指定名字空间
int main() 
{ //主函数
	int a[100]; //定义数组,大小100
	int N; //元素的实际个数
	int i = 0, j = 0; //循环变量,并进行初始化
	cin >> N; //输入元素个数
			  //-------输入数据-----------
	for (i = 0; i<N; i++) //输入N个元素
		cin >> a[i]; //循环体只有一行
					 //-------排序---------------
	for (i = 0; i<N - 1; i++) { //控制n-1趟冒泡
		for (j = 0; j<N - 1 - i; j++)
		{
			if (a[j]>a[j + 1]) { //比较相邻的两个元素
				int tmp; //临时变量
				tmp = a[j]; //交换
				a[j] = a[j + 1];
				a[j + 1] = tmp;
			}
		}
	}
	//--------输出----------
	for (i = 0; i<N; i++) 
	{ //使用循环,输出N个元素
		cout << a[i] << " "; //输出a[i], 后加空格,不换行
	}
	cout << endl; //所有元素输出完之后才换行
	return 0; //函数返回
}

三、桶思想


#include <iostream>
using namespace std;
int n, x, a[1001];
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> x;
        a[x]++;
    }
    for (int i = 1; i <= 100; i++){
        for (int j = 1; j <= a[i]; j++){
            cout << i << " ";
        }
    }
    return 0;

桶思想需要知道所有数据的大小范围,从而创建足够数量的桶,在数字对应编号的桶中放入元素,最后利用桶数组的下标本身的顺序性,判断是否有以及有几个元素即可倒推出排序后的数组。

四、选择排序

void select_sort(int a[], size_t len)
{
	int index = 0;
	for (int i = 0; i < len-1; i++)
	{
		index = i;
		for (int j = i+1; j < len; j++)
		{
			//找最小元素下标
			if (a[j] < a[index])
			{
				index = j;
			}
 
		}
		//将最小元素下标和排序序列的起始位置交换
		swap(a[i], a[index]);
	}
}

选择排序与冒泡排序不同的是,冒泡排序是依次相邻两个比较,最后推到一侧的一定是最值。选择排序是先定位置,比如我要先找第一位的,就只拿现在第一位的去跟其他每一个比,这样下来一圈也选出了最值

标签:index,排序,浅谈,int,元素,冒泡排序,include
From: https://www.cnblogs.com/hoyou06/p/18402103

相关文章

  • 【题解】【结构体排序】——[NOIP2007 普及组] 奖学金
    【题解】【结构体排序】——[NOIP2007普及组]奖学金[NOIP2007普及组]奖学金题目背景题目描述输入格式输出格式输入输出样例输入#1输出#1输入#2输出#21.题意解析2.AC代码[NOIP2007普及组]奖学金通往洛谷的传送门题目背景NOIP2007普及组T1题目描述某......
  • 迷宫,返回所有路径并排序(C++)(回溯+dfs)
    题意说明:要求给出一个m*n的矩阵迷宫,0代表入口,1代表道路,2代表墙体,3代表出口,要求返回从入口到出口的所有移动路径并按长短从小到大排序。移动路径:就是wasd的移动路径,如一共走三步:下,右,下,则输出:sds。代码如下:#include<iostream>#include<string>#include<vector>#include<alg......
  • 自定义排序规则
    Comparator接口的使用:TreeSet集合存储自定义类型的对象时,必须指定排序规则,支持如下两种方式来指定比较规则。方式一让自定义的类实现Comparable接口,重写里面的compareTo方法来指定比较规则。​//属性类publicclassStudentimplementsComparable<Student>{  privat......
  • 使用itertools 中的groupby 对字典数组进行分组后排序
    有个需求需要对数据进行分组然后对分组后的组内数据继续排序fromitertoolsimportgroupby#示例数据data=[{'a':"攻击队1",'b':'张三','c':3},{'a':"攻击队1",'b':'张三1','c':1},......
  • C#一分钟浅谈:LINQ 查询表达式的使用技巧
    在C#开发中,LINQ(LanguageIntegratedQuery)是一项强大的功能,它允许开发者以接近自然语言的方式查询数据集合。LINQ不仅简化了数据操作,还提高了代码的可读性和可维护性。本文将从基础开始,逐步深入探讨LINQ查询表达式的使用技巧,并通过具体的代码示例帮助理解常见的问题及如何避免错误......
  • Java-IO:浅谈对NIO的认识
    Java-IO:简述常见的IO模型Java-IO:浅谈对IO的认识NIO即NewIO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在JavaAPI中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。一、NIO......
  • 【数据结构】快速排序与归并排序的非递归实现
    ......
  • 快速排序(动图详解)(C语言数据结构)
    快速排序:        快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:        任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左......
  • 【数据结构】排序算法系列——插入排序(附源码+图解)
    插入排序算法思想插入排序的算法思想其实很容易理解,它秉持着一个不变的循环:比较->交换->比较->交换…因为我们排序最终的目的是要得到递增或者递减的数据,那么在原有的数据中,我们可以将数据依次两两进行比较:如果是升序,那么就将较小的放在较大的前面如果是降序,那么就将较大......
  • 3292. 称检测点查询 来源:第二十次CCF-CSP计算机软件能力认证 枚举 排序
    #include<iostream>#include<cstdio>#include<algorithm>usingnamespacestd;constintN=210;pair<int,int>p[N];intn,X,Y;intmain(){cin>>n>>X>>Y;for(inti=1;i<=n;i++){......