排序算法之相邻之间分高低----冒泡排序

本文深入讲解冒泡排序算法,通过实例演示排序过程,提供C语言和Java语言的代码实现,并分析算法的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序的基本思路是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。
例如,我们需要12 43 54 64 23这几个数从大到小排序。那么小的数自然小排在后面。首先比较12和43,由于12比43小,则互换它们的位置,顺序变成43 12 54 64 23。
按照刚才的做法,比较第二位和第三位,发现12比54小,则互换它们的位置,顺序变成43 54 12 64 23。以此类推,当一轮比较过后,顺序就变成43 54 64 23 12,最小的12就被交换到了最后。我们给这个这个过程称为“一趟”。
开始第二趟时,再次比较第一位和第二位,43比54小,交换,顺序变成54 43 64 23 12;比较第二位和第三位,43比64小,交换,顺序变成54 64 43 23 12;比较第三位和第四位,43比23大,则不交换。此时我们不再需要比较第四位和第五位了,因为在第一趟我们就已经确定好第五位是最小的了。
第三趟同样,最后顺序变成64 54 43 23 12。
第四趟发现已经排好了,但是这是一种巧合,不同的数字会有不同的情况,所以仍要进行第四趟,发现64比54大,则不交换。到此,冒泡排序就结束了。
c语言实现如下:

#include<stdio.h>
int main(){
    int a[100],i,j,t,n;
    scanf("%d",&n);  //输入一个数,表示有n个数排序
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    //冒泡排序核心
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if(a[j]<a[j+1])
            { t=a[j];a[j]=a[j+1];a[j+1]=t; }
        }
    }
    for(i=0;i<n;i++)
       printf("%d ",a[i]);
    getchar();getchar();
    return 0;
}

稍作修改,解决桶排序遗留的问题:
c语言实现如下:

#include<stdio.h>
struct stu{
	char name[21];
	int score;
};
int main(){
	struct stu a[100],t;
    int i,j,n;
    scanf("%d",&n);  //输入一个数,表示有n个数排序
    for(i=0;i<n;i++)
        scanf("%s %d",a[i].name,&a[i].score);
    //冒泡排序核心
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if(a[j].score<a[j+1].score)
            { t=a[j];a[j]=a[j+1];a[j+1]=t; }
        }
    }
    for(i=0;i<n;i++)
       printf("%s\n",a[i].name);
    getchar();getchar();
	return 0;
}

Java语言实现如下:

import java.util.Scanner;

class student{
	String name;
	int score;
	student(String name,int score){
		this.name=name;
		this.score=score;
	}
}
public class Maopao {
	public static void main(String[] args) {
		student []stu =new student[100];
		int i,j,n;
		student t;
		Scanner sc=new Scanner(System.in);
		n=sc.nextInt();
		for(i=0;i<n;i++) 
		    stu[i]=new student(sc.next(),sc.nextInt());
		for(i=0;i<n-1;i++){
		    for(j=0;j<n-i-1;j++){
		        if(stu[j].score<stu[j+1].score)
		        { t=stu[j];stu[j]=stu[j+1];stu[j+1]=t; }
		    }
		}
		for(i=0;i<n;i++)
			   System.out.println(stu[i].name);
	}
}

冒泡排序的核心是双重循环嵌套。时间复杂度为O(N*2)。

上节:桶排序。
下节:快速排序。

### 部署 Stable Diffusion 的准备工作 为了成功部署 Stable Diffusion,在本地环境中需完成几个关键准备事项。确保安装了 Python 和 Git 工具,因为这些对于获取源码和管理依赖项至关重要。 #### 安装必要的软件包和支持库 建议创建一个新的虚拟环境来隔离项目的依赖关系。这可以通过 Anaconda 或者 venv 实现: ```bash conda create -n sd python=3.9 conda activate sd ``` 或者使用 `venv`: ```bash python -m venv sd-env source sd-env/bin/activate # Unix or macOS sd-env\Scripts\activate # Windows ``` ### 下载预训练模型 Stable Diffusion 要求有预先训练好的模型权重文件以便能够正常工作。可以从官方资源或者其他可信赖的地方获得这些权重文件[^2]。 ### 获取并配置项目代码 接着要做的就是把最新的 Stable Diffusion WebUI 版本拉取下来。在命令行工具里执行如下指令可以实现这一点;这里假设目标路径为桌面下的特定位置[^3]: ```bash git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git ~/Desktop/stable-diffusion-webui cd ~/Desktop/stable-diffusion-webui ``` ### 设置 GPU 支持 (如果适用) 当打算利用 NVIDIA 显卡加速推理速度时,则需要确认 PyTorch 及 CUDA 是否已经正确设置好。下面这段简单的测试脚本可以帮助验证这一情况[^4]: ```python import torch print(f"Torch version: {torch.__version__}") if torch.cuda.is_available(): print("CUDA is available!") else: print("No CUDA detected.") ``` 一旦上述步骤都顺利完成之后,就可以按照具体文档中的指导进一步操作,比如调整参数、启动服务端口等等。整个过程中遇到任何疑问都可以查阅相关资料或社区支持寻求帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值