【数据结构】【c】【算法】冒泡排序,简单选择排序,插入排序的实现

冒泡排序,简单选择排序,直接插入排序,归并排序,快速排序算法 //各种排序算法的实现 //容易 //2020/4/12 #include <cstdio> #include<cstdlib> #define MaxSize 100 typedef int ElemType; typedef struct SqList { int data[MaxSize]; int length; }SqList; //简单选择排序 //对一个序列a中的元素按从小到大进行选择排序 void selectsort(int a[]) { 阅读详情
//编写人:naruuu
//编写功能:排序算法的实现
//编写时间:12 11
#include <stdio.h>
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

#define N 1000
int arr[N];


/* 对长度为n的数组arr执行冒泡、插入、选择排序 */
void bubbleSort(int arr[], int n);
void insertionSort(int arr[], int n);
void selectionSort(int arr[], int n);
/* 打印长度为n的数组arr */
void printArray(int arr[], int n);

void swap(int *xp, int *yp) {
    int temp = *xp;
    *xp = *yp;
    *yp = temp;
}

int main() {
    int n, i,a[N];
	cout<<"请输入要排序的数组的长度:"<<endl;
	cin >> n;
	cout << "请输入要排序的数组:" << endl;
    for (i = 0; i < n; ++i) {
		cin >> arr[i];
    }
	for(i=0;i<n;i++)a[i]=arr[i];
    bubbleSort(a, n);
	for(i=0;i<n;i++)a[i]=arr[i];
	insertionSort(a,n);
	for(i=0;i<n;i++)a[i]=arr[i];
	selectionSort(a,n);
    //printArray(arr, n);
    return 0;
}
/* 打印长度为n的数组arr */
void printArray(int arr[], int n) {
    int i;
    for (i = 0; i < n; i++) {
		cout << arr[i];
        if (i < n - 1)    /* 下标0..n-2每个元素后面有个空格 */
           cout << " "; /*下标n-1,也就是最后一个元素后面没有空格*/
    }
	cout << endl; /* 一行打印完后换行 */
}

void insertionSort(int arr[], int n){
    int i,j,t;
	int tang=0;
	printf("插入排序:\n");
	for(i=1;i<n;i++){ //arr[i]插入到前面的有序序列中
	    if(arr[i]<arr[i-1])
		{
		    t=arr[i];
			arr[i]=arr[i-1];
			for(j=i-2;j>=0;j--)
			{
			    if(t<arr[j]) arr[j+1]=arr[j];
				else break;
			}
			arr[j+1]=t;
		}
		cout << "第" << ++tang << "趟:";
		printArray(arr,n);
	}
}
void selectionSort(int arr[], int n){
    int i,j,t,x;
	int tang=0;
	cout << "选择排序" << endl;
	for(i=n-1;i>=1;i--){
		t=0;
		for(j=1;j<=i;j++){
		    if(arr[t]<arr[j]) t=j;
		}
        x=arr[t];
		arr[t]=arr[i];
		arr[i]=x;
		cout << "第" << ++tang << "趟:";

		printArray(arr,n);
	}
}

void bubbleSort(int arr[], int n){
    int i,j;
	int tang=0;
	cout << "冒泡排序" << endl;
	for(j=n-1;j>=1;j--){
		for(i=0;i<j;i++){
			if(arr[i]>arr[i+1]){
			    int t=arr[i];arr[i]=arr[i+1];arr[i+1]=t;
			}
		}
		cout << "第"<< ++tang<< "趟:";
		printArray(arr,n);
	}
}






/*测试结果:
/*
输入样例:

10
1 19 9 11 4 3 5 8 10 6
输出样例:


请输入要排序的数组的长度:
10
请输入要排序的数组:
1 19 9 11 4 3 5 8 10 6
冒泡排序
第1趟:1 9 11 4 3 5 8 10 6 19
第2趟:1 9 4 3 5 8 10 6 11 19
第3趟:1 4 3 5 8 9 6 10 11 19
第4趟:1 3 4 5 8 6 9 10 11 19
第5趟:1 3 4 5 6 8 9 10 11 19
第6趟:1 3 4 5 6 8 9 10 11 19
第7趟:1 3 4 5 6 8 9 10 11 19
第8趟:1 3 4 5 6 8 9 10 11 19
第9趟:1 3 4 5 6 8 9 10 11 19
插入排序:
第1趟:1 19 9 11 4 3 5 8 10 6
第2趟:1 9 19 11 4 3 5 8 10 6
第3趟:1 9 11 19 4 3 5 8 10 6
第4趟:1 4 9 11 19 3 5 8 10 6
第5趟:1 3 4 9 11 19 5 8 10 6
第6趟:1 3 4 5 9 11 19 8 10 6
第7趟:1 3 4 5 8 9 11 19 10 6
第8趟:1 3 4 5 8 9 10 11 19 6
第9趟:1 3 4 5 6 8 9 10 11 19
选择排序
第1趟:1 6 9 11 4 3 5 8 10 19
第2趟:1 6 9 10 4 3 5 8 11 19
第3趟:1 6 9 8 4 3 5 10 11 19
第4趟:1 6 5 8 4 3 9 10 11 19
第5趟:1 6 5 3 4 8 9 10 11 19
第6趟:1 4 5 3 6 8 9 10 11 19
第7趟:1 4 3 5 6 8 9 10 11 19
第8趟:1 3 4 5 6 8 9 10 11 19
第9趟:1 3 4 5 6 8 9 10 11 19
*/
冒泡排序 算法(冒泡,选择,插入,数组排序) 算法(冒泡,选择,插入,数组排序) package Teacher; import java.io.*; import java.util.Scanner; public class Tset { public static void main(String args[]) throws IOException { // 需要排序的数组,目前是按照升序排列的 int a[] = new int[5]; System.out.println("请输入数字,每输入一个数字按回车键!"); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); for(int i =0;i<a.length;i++){ a[i]=Integer.parseInt(br.readLine()); //a[i]=Integer.parseInt(args[i]); } /* //冒泡排序 for(int i=0;i<a.length;i++){ for(int j=i+1;j<a.length;j++){//注意j的开始值是i+1,因为按照排序规则,比a[i]大的值都应该在它后面 if(a[i] > a[j]){ int temp = a[j]; a[j] = a[i]; a[i] = temp; } } } */ /* //选择排序 int k, temp; for(int i=0; i<a.length; i++) { k = i; for(int j=k+1; j<a.length; j++) { if(a[j] < a[k]) { k = j; } } if(k != i) { temp = a[i]; a[i] = a[k]; a[k] = temp; } }//优化算法,每次循环只调换一次 */ /* // 插入排序 int temp; for (int i = 1; i < a.length; i++) {// i=1开始,因为第一个元素认为是已经排好序了的 for (int j = i; (j > 0) && (a[j] < a[j - 1]); j--) { // 交换 temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; } } */ //数组排序 java.util.Arrays.sort(a); // 检测一下排序的结果 for(int i : a){ System.out.print(" "+i); } } } 立即下载

相关推荐

直接插入排序法、冒泡排序法、直接选择排序法算法

C语言代码 直接插入法排序算法fun1,冒泡法排序排列算法fun2,直接选择法排序算法fun3。

(九)数据结构之简单排序算法实现:冒泡排序、插入排序和选择排序

1、冒泡排序 /* 冒泡排序,按照由小到大顺序进行排序 */ void Bubble_Sort( ElementType A[], int N ) { int P, i; int flag = 0; /* 定义一个flag来判断带排序序列是否有序或局部有序,提高算法效率 */ for ( P=N-1; P>=0; P-- ) { flag = 0; for( i=0; i<P;

TECH_PRO的博客 1407

7种常用排序算法实现(C++)(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序以及快速排序)

本文件是7种常用排序算法的实现(C++),包括冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序以及快速排序。代码详细有注释且有测试用例。

冒泡排序、选择排序、插入排序 算法实现(C++)

这三种排序方法都是O(N2)的,概念和实现如下。   冒泡排序:通过N-1次对剩余未排序元素中最大(小)元素的上浮来实现排序,上浮过程通过交换相邻元素实现。   template void BubbleSort(ElementType A[], int N) {     ElementType Temp;     for (int i=0; i     {         fo

做一个优雅的程序员 4924

直接插入、折半插入、冒泡、快速、简单选择等排序方法 用c语言实现

直接插入、折半插入、冒泡、快速、简单选择等排序方法 用c语言实现 代码运行正常 不会有任何的问题

使用buildroot系统的qmake编译QT出现Unknown module(s) in QT: xxxx 的错误解决方法

可以看到,我这里使用的是 qt5base-5.15.2 目录下的qmake,这个qmake只包含了基础的qt模块,而额外添加的qt模块没有包含进去,需要使用。可以看到我这里是有的,如果你跟我一样,模块存在,但是还是报找不到对应模块的错误的话,大概率是跟我一样,用错qmake了,看第二点。在包含 qt5base 目录下查看,是否有对应模块的目录,如果没有的话,需要通过make menuconfig 添加一下。目录下的qmake才可以。

T541132的博客 2490

【简单排序算法】:简单选择排序、直接插入排序和冒泡排序

【简单排序算法】:简单选择排序、直接插入排序和冒泡排序 简单选择排序: 原理:设所排序序列的记录个数为n。i取1,2,…,n-1,每次从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出最小的记录,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。性能:最好、最坏和平均时间复杂度均为O(n2),不稳定排序算法。 JAVA实现: 1 //简单选择排序 2 ...

weixin_34309543的博客 435

windows10 + wsl2安装docker

一、安装wsl https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 1.1以管理员身份运行powershell 1.2执行如下命令 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 1.3重启电脑 1.4 重启电脑后,如果需要安装wsl2, 则安装官方文档继续后续操作,因我...

happytree001的博客 1569

数据结构--C语言--排序算法的实现--插入排序,希尔排序,冒泡排序,快速排序,简单选择排序,堆排序

排序算法的实现(必做,验证性实验,4学时) 实验目的 熟悉排序的方法、过程及原则。掌握插入排序、快速排序、选择排序、归并排序的算法思想及实现方法,掌握其时间复杂度的分析方法。 实验内容 定义待排序序列的存储结构。验证插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序中各排序方法中的一、二个排序算法。 插入类排序:直接插入排序、希尔排序 交换类排序:冒泡排序、快速排序 ...

J_SUNV的博客 1832

从零构建腾讯滑块验证码破解引擎:逆向工程与实战对抗

本文深入解析腾讯滑块验证码(原天御验证码)的防护机制,包括环境感知层、行为分析层和验证决策层的核心技术。通过JSVMP虚拟机保护、轨迹验证算法和动态加密体系,腾讯验证码实现了高效的人机识别。文章还提供了安全研究实践指南,涵盖环境模拟和验证码识别方案,并探讨了防御对抗的演进趋势与合规研究建议。

rl6adventurer的博客 830

unity 在透明物体上投射阴影

unity版本:2019.4.16 创建一个shader,代码如下: Shader "ChuckLee/ARShadow" { Properties { _ShadowColor("Shadow Color", Color) = (0.1, 0.1, 0.1, 0.53) } SubShader { Tags{ "RenderType" = "Transparent" "Queue" = "Geometry+1" } Blend SrcAlpha OneMinusSrcAlph

Abel02的博客 2953

数据结构-十大排序算法

十大排序算法分别是直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、外部排序。其中插入排序包括直接插入排序、折半插入排序、希尔排序;交换排序包括冒泡排序、快速排序;选择排序包括简单选择排序、堆排序。

致大尽微 家国天下 4386

第1集:认识 Claude Code —— AI 编程新纪元

1. 定义 Claude Code:终端中的 AI 编程代理Claude Code 是 Anthropic 公司于 2025 年 5 月正式推出的命令行 AI 编程工具,它不只是一个代码补全工具,而是一个能够理解项目、自主执行任务的**终端 AI 代理(Agent)。它的核心理念是 **"生于终端,活于终端"** (lives in your terminal)。与深度嵌入图形界面(GUI)的工具不同,Claude Code 选择直接融入开发者最原始、最核心的工作环境——命令行。

dianziyao_的博客 865

python sort 部分元素_Python 简单排序算法-选择、冒泡、插入排序实现

写文章主要是记录自己每天学习的东西,本篇文章主要介绍数据结构中常用的简单的排序算法,虽然这些算法用Python实现起来不是十分的高效,不如c、java之类的运行速度快,应用Python实现主要是为了:1、证明我已经理解了这些算法,2、实现算法可以给自己带来莫名的成就感,这也算是自己的一点积累吧,多少年后,看了这些文章会有些许的自豪吧,好了,言归正传,进入今天的正题:简单排序算法之选择、冒泡、插入排...

weixin_39609500的博客 117

Matlab 轴承信号仿真+分析

文章目录项目说明1、信号仿真1.1 仿真公式1.2 信号参数设置1.3 代码实现2、仿真信号分析2.1 小波变换2.2 快速谱峭度 项目说明 本文主要解决两个问题: 1、仿真包含周期性冲击信号、随机干扰冲击信号、调制干扰信号以及随机噪声四个成分的故障轴承信号; 2、使用小波变换以及快速谱峭度对该仿真信号进行分析。 1、信号仿真 1.1 仿真公式 这里的仿真信号公式主要参考了包文杰学者的硕士论文《加权谱峭度故障诊断方法研究与应用》,列举公式如下: 周期性冲击信号仿真 随机干扰冲击信号仿真 调制

cocofisher的博客 9267

AI翻译工具自动翻译日语视频生成srt中文字幕,支持离线轻松生成任意日语视频字幕!可选择支持显卡模式和cpu模式低显存也能用

【AI离线字幕神器:日语视频一键转中文字幕】推荐一款基于Faster-Whisper的本地化字幕工具,可离线生成日语视频的中文字幕(.srt格式),支持CPU/GPU加速处理。实测1小时视频最快4-5分钟完成翻译,无需联网保护隐私。操作简单只需拖拽文件,支持批量处理音频(mp3/wav)和视频(mp4/mkv)文件,还能自定义输出格式和参数调整。特别适合需要观看无字幕日语资料的用户,堪称技术宅必备神器。下载地址附后,包含详细使用教程和参数配置说明。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

C数据结构,常用的排序重温

1)数字类型一致2)存储连续3)查询方便4)创建时数组大小确定。多多理解,记忆,确实较难一些。

zgzldnr的博客 190

在 FreeStyle SAP UI5 应用里优雅落地 Draft 草稿机制:用 DraftManager 封装 DraftController 的一套实战套路

SAP Fiori应用中,Draft草稿机制是解决业务中断、多人协作和长表单填写等痛点的核心能力。本文提出了一套针对FreeStyle SAP UI5应用的Draft管理方案,通过封装sap.ui.generic.app.transaction.DraftController为DraftManager服务类,将复杂的草稿操作逻辑集中管理。该方案实现了草稿的创建、激活、丢弃等核心功能,使控制器只需调用简单意图式API即可完成操作,同时解决了组件化架构下的上下文切换、统一错误处理等问题。文章还详细介绍了后端Dr

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2751

数据结构常用查找排序算法

数据结构排序算法(插入,交换,归并,基数,堆排序)

weixin_47330075的博客 186

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C#排序算法

C#十种排序算法 1. 冒泡排序 N个数字来排队,两两相比小靠前。 外层循环N-1,内层循环N-1-i。 int[] list = new int[8] { 8,6,2,7,1,9,0,3}; for (int i = 0; i < list.Length-1; i++) { for (int j = 0; j < list.Length-i-1; j++) { if (list[...

-_^汪洸*的博客 387

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数据结构排序方法1

/ 收集桶中元素回原数组。// 分配元素到桶中。// 基数排序主循环。

xuhaoyu_cpp_java的博客 193

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数据结构C语言-9种排序算法(插入、交换、选择、归并、基数排序)

以下代码包含: 直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序 #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int status; typedef int ElemType;...

qq_42845341的博客 381

排序算法的理解和实现

排序算法一般分为两大类,一类是外部排序,这种排序的规模往往比较大,要排序的数据无法同时存放在内存中,必须在排序的过程中不断的在内外存之间移动;另一类是内部排序,规模较小。可以在完全在内存中进行。今天主要实现的是内部排序,常见的内部排序又可以分为五大类:插入排序、交换排序、选择排序、归并排序、基数排序。

silvers的博客 313

【数据结构基础】五大排序算法的C++实现(冒泡,选择,插入,归并,快排)

【数据结构基础】各大排序算法的C++实现

梁瑛平的博客 696

实现冒泡排序、插入排序、选择排序、shell排序

public class Textsort { public static void bubbleSort(int[] x){ //冒泡排序 for(int i=0;i<x.length;i++){ for(int j=i+1;j<x.length;j++){ if(x[i]>x[j]){ int temp=x[i]; x[i]=x[j]; x[

行也思君 829

【数据结构与算法】简单排序(冒泡排序、选择排序、插入排序)完整思路,并用代码封装排序函数

之前的文章,我已经把前端需要了解的数据结构都给说了一边,并且我们也都对其进行了封装。现在我们要开始对排序算法部分进行讲解,排序算法顾名思义,就是对一堆杂乱无章的数据按照一定的规则将它们有序地排列在一起。 在讲解排序算法时,大致分成两大类,如下图 本文

零一的博客 2万+
上一篇: 【c】【结构体】日期类型的实现
下一篇: 【数据结构】【c】【结构体】【算法】二叉树算法(二叉树的前中后序遍历,高度,结点数,叶子结点数计算)
久远jy_naru
博客等级 码龄7年 91粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值