图解三傻排序 选择排序、冒泡排序、插入排序

(1)选择排序

cpp 复制代码
// 交换
void swap(int arr[], int i, int j) {
	int tmp = arr[i];
	arr[i] = arr[j];
	arr[j] = tmp;
}

// 选择排序 
void selectionSort(int arr[],int len) {
	if (len < 2) return;
	for (int minIndex, i = 0; i < len - 1; i++) {
		minIndex = i;
		for (int j = i + 1; j < len; j++) {
			if (arr[j] < arr[minIndex]) {
				minIndex = j;
			}
		}
		swap(arr, i, minIndex);// 交换
	}
	printf("选择排序:");
	print(arr, len);// 打印
}

(2)冒泡排序

cpp 复制代码
// 交换
void swap(int arr[], int i, int j) {
	int tmp = arr[i];
	arr[i] = arr[j];
	arr[j] = tmp;
}
// 冒泡排序 
void bubbleSort(int arr[], int len) {
	if (len < 2) return;
	for (int end = len - 1; end > 0; end--) {
		for (int i = 0; i < end; i++) {
			if (arr[i] > arr[i + 1]) {
				swap(arr, i, i + 1);
			}
		}
	}
	printf("冒泡排序:");
	print(arr, len);// 打印
}	

(3)插入排序

cpp 复制代码
// 交换
void swap(int arr[], int i, int j) {
	int tmp = arr[i];
	arr[i] = arr[j];
	arr[j] = tmp;
}
// 插入排序
void insertionSort(int arr[], int len) {
	if (len < 2) return;
	for (int i = 1; i < len; i++) {
		for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
			swap(arr, j, j + 1);
		}
	}
	printf("插入排序:");
	print(arr, len);// 打印
}

C++完整代码:

cpp 复制代码
// 选择、冒泡、插入排序
/*
	选择排序一句话:i~n-1范围上,找到最小值并放在i位置,然后 i+1 ~ n-1范围上继续
	冒泡排序一句话:0~i范围上,相邻位置较大的数滚下去,最大值最终来到i位置,然后0~i-1范围上继续
	插入排序一句话:0~i范围上已经有序,新来的数从右到左滑到不再小的位置插入,然后继续
*/
#include <iostream>
using namespace std;
void print(int arr[],int len) {
	for (int i = 0; i < len; i++) {
		printf("%d\t", arr[i]);
	}
	printf("\n");
}

// 交换
void swap(int arr[], int i, int j) {
	int tmp = arr[i];
	arr[i] = arr[j];
	arr[j] = tmp;
}

// 选择排序 
void selectionSort(int arr[],int len) {
	if (len < 2) return;
	for (int minIndex, i = 0; i < len - 1; i++) {
		minIndex = i;
		for (int j = i + 1; j < len; j++) {
			if (arr[j] < arr[minIndex]) {
				minIndex = j;
			}
		}
		swap(arr, i, minIndex);// 交换
	}
	printf("选择排序:");
	print(arr, len);// 打印
}

/*
	0~n-1 
	0~n-2
	0~n-3
	...
	0~end--
*/
// 冒泡排序 
void bubbleSort(int arr[], int len) {
	if (len < 2) return;
	for (int end = len - 1; end > 0; end--) {
		for (int i = 0; i < end; i++) {
			if (arr[i] > arr[i + 1]) {
				swap(arr, i, i + 1);
			}
		}
	}
	printf("冒泡排序:");
	print(arr, len);// 打印
}	

/*
	0~0
	0~1
	0~2
	0~3
	...
	0~n-1
*/
// 插入排序
void insertionSort(int arr[], int len) {
	if (len < 2) return;
	for (int i = 1; i < len; i++) {
		for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
			swap(arr, j, j + 1);
		}
	}
	printf("插入排序:");
	print(arr, len);// 打印
}

int main() {
	int arr[] = { 1,4,2,6,3,7,0,5};
	int len = sizeof(arr) / sizeof(arr[0]);
	//selectionSort(arr,len);
	//bubbleSort(arr, len);
	insertionSort(arr, len);
	system("pause");
	return 0;
}
相关推荐
啊我不会诶5 分钟前
CF每日4题
算法
uhakadotcom21 分钟前
人工智能如何改变医疗行业:简单易懂的基础介绍与实用案例
算法·面试·github
山北雨夜漫步2 小时前
机器学习 Day14 XGboost(极端梯度提升树)算法
人工智能·算法·机器学习
到底怎么取名字不会重复2 小时前
Day10——LeetCode15&560
c++·算法·leetcode·哈希算法·散列表
chuxinweihui2 小时前
数据结构——二叉树,堆
c语言·开发语言·数据结构·学习·算法·链表
freexyn2 小时前
Matlab自学笔记五十一:(推荐)输入参数的数量和可变数量的输入
笔记·算法·matlab
陈大大陈2 小时前
基于 C++ 的用户认证系统开发:从注册登录到Redis 缓存优化
java·linux·开发语言·数据结构·c++·算法·缓存
看到我,请让我去学习3 小时前
C语言基础(day0424)
c语言·开发语言·数据结构
数据分析螺丝钉3 小时前
LeetCode 252 会议室 III(Meeting Rooms III)题解与模拟面试
算法·leetcode·职场和发展
小李独爱秋3 小时前
动态哈希映射深度指南:从基础到高阶实现与优化
数据结构·算法·哈希算法