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

(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;
}
相关推荐
Ljubim.te27 分钟前
软件设计师——数据结构
数据结构·笔记
Eric.Lee202134 分钟前
数据集-目标检测系列- 螃蟹 检测数据集 crab >> DataBall
python·深度学习·算法·目标检测·计算机视觉·数据集·螃蟹检测
林辞忧43 分钟前
算法修炼之路之滑动窗口
算法
￴ㅤ￴￴ㅤ9527超级帅1 小时前
LeetCode hot100---二叉树专题(C++语言)
c++·算法·leetcode
liuyang-neu1 小时前
力扣 简单 110.平衡二叉树
java·算法·leetcode·深度优先
penguin_bark1 小时前
LCR 068. 搜索插入位置
算法·leetcode·职场和发展
_GR1 小时前
每日OJ题_牛客_牛牛冲钻五_模拟_C++_Java
java·数据结构·c++·算法·动态规划
ROBIN__dyc2 小时前
表达式
算法
无限大.2 小时前
c语言实例
c语言·数据结构·算法
六点半8882 小时前
【C++】速通涉及 “vector” 的经典OJ编程题
开发语言·c++·算法·青少年编程·推荐算法