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

(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;
}
相关推荐
一只小透明啊啊啊啊6 分钟前
Leetcode100子串
算法
木向6 分钟前
leetcode:114. 二叉树展开为链表
算法·leetcode·链表
sky_smile_Allen10 分钟前
[C#] 关于数组的详细解释以及使用注意点
开发语言·算法·c#
希望有朝一日能如愿以偿27 分钟前
力扣题解(新增道路查询后的最短距离II)
算法
我感觉。36 分钟前
【机器学习chp6】对数几率回归
算法·机器学习·逻辑回归·分类模型·对数几率回归
无限大.1 小时前
力扣题解3248 矩阵中的蛇(简单)
算法·leetcode·矩阵
灼华十一1 小时前
算法编程题-排序
数据结构·算法·golang·排序算法
一子二木生三火1 小时前
IO流(C++)
c语言·开发语言·数据结构·c++·青少年编程
谁在夜里看海.1 小时前
【从零开始的算法学习日记✨优选算法篇✨】第二章:流动之窗,探索算法的优雅之道
c++·学习·算法
SoraLuna2 小时前
「Mac玩转仓颉内测版25」基础篇5 - 布尔类型详解
开发语言·算法·macos·cangjie