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

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;
}
相关推荐
红尘客栈215 小时前
ELK 企业级日志分析系统实战指南
数据结构
hn小菜鸡15 小时前
LeetCode 1089.复写零
算法·leetcode·职场和发展
与己斗其乐无穷15 小时前
算法(一)双指针法
数据结构·算法·排序算法
艾莉丝努力练剑16 小时前
【编码表 && STL】C++编程基石:从字符编码表到STL标准库的完整入门指南
java·linux·c++
工头阿乐16 小时前
Ubuntu 安装与使用C++ onnxruntime库
linux·c++·ubuntu
无挂写代码16 小时前
C++入门
开发语言·c++
努力努力再努力wz16 小时前
【C++进阶系列】:位图和布隆过滤器(附模拟实现的源码)
java·linux·运维·开发语言·数据结构·c++
eSoftJourney16 小时前
C 语言核心关键字与数据结构:volatile、struct、union 详解
c语言·数据结构
争不过朝夕,又念着往昔16 小时前
利用计时器了解Boost Asio
c++
(❁´◡`❁)Jimmy(❁´◡`❁)16 小时前
【Trie】 UVA1401 Remember the Word
算法·word·图论