排序算法实现(基于408)

文章目录

简单易实现的三大排序

这里为了方便大家写好后检验我们可以直接以洛谷这个题来检查代码。并且这里给的只有三个数据我们使用这三个排序也不会太麻烦。

插入排序

对于插入排序我个人的理解是将数组分成两部分:已排序和未排序。我们每轮的任务就是从未排序序列中选择一个数并为其在已排序序列中找到一个合适的位置供其插入。什么时候算是找到插入位置呢?如果是升序排序就是当我们第一次在已排序序列中找到一个数小于等于(等于是为了排序的稳定性)当前选择的数的时候我们就可以把这个数插到他后面去。那如果已排序序列中的数大于当前这个数呢?我们就需要像打牌一样把已排序序列中的数往后移便于空出位置插入。因此循环内的逻辑就是:大于>>元素后移;小于等于>>找到位置插入。 那我们应该怎么控制循环呢?初始状态下我们可以从第二个元素开始,这样前面只有一个元素当然可以认为是排好序的。接下来我们只需要记录下当前未排序序列中选定的这个数(因为后续可能会因为元素移动而被覆盖)往前开始找插入位置即可。于是代码如下:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main(){
  int a[3];
  cin>>a[0]>>a[1]>>a[2];
  for(int i = 1;i<3;i++){
  	int cur = a[i];
  	int j;
  	for(j = i-1;j>=0;j--){
  		if(a[j]>cur){
  			a[j+1] = a[j];
		  }else{
		  	break;
		  }
	  }
	  a[j+1] = cur;
  } 
  
  cout<<a[0]<<" "<<a[1]<<" "<<a[2];
  }

选择排序

选择排序的思想我觉得就更简单了:每轮从数组中选一个最小的元素把它交换到第一位即可。因此在循环内我们只需要比较即可,最后用cpp自带的swap函数把他和当前轮中的第一位元素交换即可。代码如下:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main(){
  int a[3];
  cin>>a[0]>>a[1]>>a[2];
  
  for(int i = 0;i<3;i++){
  	int min_index = i;
  	for(int j = i+1;j<3;j++){
  		if(a[j] < a[min_index]){
  			min_index = j;
		  }
	  }
	  swap(a[i],a[min_index]);
  }
  cout<<a[0]<<" "<<a[1]<<" "<<a[2]; 
  }

冒泡排序

个人感觉冒泡排序和插入排序其实很像,如果是升序排序的话我们每轮会将一个最大的元素冒到后面去,因此数组末尾已排好序的序列会逐渐变长。并且由于冒泡排序每轮都会交换因此当数组没有发生交换时就可以判断当前已排好序可以停止,因此我们可以设置一个bool变量,每当调用过swap函数就将其值改为true,每轮开始前又改回false,这样当出现一轮没有变化时就可以提前退出循环。在循环外我们可以设置一个end变量用来记录当前已排好序的位置,初始状态下end = 最后一个元素所在位置(只有一个元素可以认为是有序的)于是代码如下:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main(){
  int a[3];
  cin>>a[0]>>a[1]>>a[2];
  
  int end = 2;
  bool flag = true;
  while(flag){
  	flag = false;
  	for(int i=0;i<end;i++){
  		if(a[i]>a[i+1]){
  			swap(a[i],a[i+1]);
  			flag = true;
		  }
	  }
	  end--;
  } 
  cout<<a[0]<<" "<<a[1]<<" "<<a[2]; 
  }

最近再看408的os,剩下的几个排序后面做到题在更吧。希望大家看完能练一下熟练掌握这几个简单排序算法的实现,哪里写的不好的也请大家指出,谢谢!

相关推荐
吃好睡好便好8 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅9 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
x_yeyue11 小时前
三角形数
笔记·算法·数论·组合数学
Mr. zhihao12 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
念何架构之路12 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星12 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑12 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光13 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩13 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_6294947313 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表