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

(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;
}
相关推荐
hahaha60162 小时前
数字图像时域滤波或者3D降噪算法FPGA实现
算法·计算机视觉·fpga开发
YSL0701242 小时前
一文通关-----树和二叉树
数据结构·算法
小糯米6012 小时前
数据结构 数组与链表 内存与缓存
数据结构
青少儿编程课堂2 小时前
蓝桥杯青少组图形化+信息素养+电子学会Scratch考级:校园口算闯关解析
c++·python·算法·bfs·信息学竞赛
computersciencer2 小时前
应用贝叶斯公式:迟到了,那坐的是哪种交通工具呢?
算法·机器学习·概率论
若亦_2 小时前
排序>>交换排序
java·数据结构·算法
努力努力再努力wz2 小时前
【Lua 入门系列】Lua数据结构:从 Table 出发,一文串联数组、链表、栈、队列、集合、映射与树的实现原理
数据结构·链表·lua
dialect_11 小时前
KMP算法
开发语言·c++·算法
reikocao11 小时前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
漂流瓶jz12 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典