基础排序--冒泡--选择--插入

1、冒泡排序

cpp 复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

//冒泡排序
void bubblesort(int q[],int N) 
{
	
	int temp = 0;
	for(int i = 0;i<N-1;i++)
	{
		for(int j = 0;j<N-i-1;j++)
		{
			if(q[j]>=q[j+1])  //注意这里不要写成j++ 
			{
				temp = q[j];
				q[j] = q[j+1];
				q[j+1] = temp;
			}
		}
	}
	
}


int main()
{
	int q[5] = {100,500,10,30,455};
	int n = sizeof(q) / sizeof(int);
	bubblesort(q,5);
	
	for(int i = 0;i<n;i++)
	{
		printf("%d ",q[i]);
	}
	
	return 0;
}

2、选择排序

外层大循环是n-1次 (因为是两两对比)

内层小循环是从第二个元素开始

思路:将当前未排序区间的第一个元素,设置为最小值

然后从第二个元素开始对比,然后将对比出的最小值,与这个区间的第一个元素交换即可

cpp 复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

//冒泡排序
void selectsort(int q[],int N) 
{
	int minIndex = 0;
	int temp;
	for(int i = 0;i<N-1;i++)
	{
		//假设未排序区间第一个元素是最小值
		minIndex = i;
		
		//从第二个元素开始对比 
		 for(int j = i+1;j<N;j++)
		 {
		 	if(q[j]<q[minIndex])
		 	{
		 		minIndex = j;
			 }
		 }
		 
		  // 将找到的最小值与未排序区间的第一个元素交换
		  temp = q[minIndex];
		  q[minIndex] = q[i];
		  q[i] = temp;
		 
		
	}
}



int main()
{
	int q[5] = {1,500,10,30,455};
	int n = sizeof(q) / sizeof(int);
	selectsort(q,5);
	
	for(int i = 0;i<n;i++)
	{
		printf("%d ",q[i]);
	}
	
	return 0;
}

3、插入排序

思路:将数组分为'已排序区间'和'未排序区间',每次从未排序区间取一个元素,插入到已排序区间的合适位置,直到所有元素排序完成

默认第一个元素已排序,从第二个元素开始

设立一个下标 J , 表示已排序区间的最后一位

如果 J 的值 大于当前要比较的值,那么我们将 q【j】这一位往后移,同时 j-- ,继续向前比较

如果不用再比较了,那么直接让q[j+1]这一位原来的 q【j】 的值变成current的值即可

cpp 复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

//插入排序
void insertsort(int q[],int n)
{
	int i,j,current;
	//未排序区间的第一个元素(从1开始,0号元素默认已排序)
	for(i=1;i<n;i++)
	{
		current = q[i];
		j = i-1;  //j是已排序区间末尾下标 
	
	//内层循环
	while(j>=0 && q[j] > current)
	{
		q[j+1] = q[j]; //元素后移一位 
		j--; //继续向前比较 
	 } 
	 
	   // 将current插入到正确位置(j+1是插入索引)
	   q[j+1] = current;
}
 } 

int main()
{
	int q[5] = {1,500,1022,30,455};
	int len = sizeof(q) / sizeof(q[0]);
	insertsort(q,len);
	
	for(int i = 0;i<len;i++)
	{
		printf("%d ",q[i]);
	}
	
	return 0;
}
相关推荐
CoovallyAIHub13 分钟前
OpenClaw一脚踩碎传统CV?机器终于不再只是看世界
深度学习·算法·计算机视觉
CoovallyAIHub29 分钟前
仅凭单目相机实现3D锥桶定位?UNet-RKNet破解自动驾驶锥桶检测难题
深度学习·算法·计算机视觉
zone773930 分钟前
002:RAG 入门-LangChain 读取文本
后端·算法·面试
樱木Plus1 小时前
深拷贝(Deep Copy)和浅拷贝(Shallow Copy)
c++
得物技术1 小时前
得物社区搜推公式融合调参框架-加乘树3.0实战
算法
会员源码网20 小时前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
木心月转码ing21 小时前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
HelloReader1 天前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
颜酱1 天前
二叉树分解问题思路解题模式
javascript·后端·算法
qianpeng8971 天前
水声匹配场定位原理及实验
算法