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

(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;
}
相关推荐
伊玛目的门徒4 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
Jerry5 小时前
LeetCode 226. 翻转二叉树
算法
想做小南娘,发现自己是女生喵6 小时前
【无标题】
数据结构·算法
Kx_Triumphs8 小时前
HDU4348 To the moon(主席树区间修改模板)
算法·题解
旖-旎8 小时前
《LeetCode647 回文子串 || LeetCode 5 最长回文子串》
c++·算法·leetcode·动态规划·哈希算法
轻颂呀9 小时前
约瑟夫环问题
算法
凤凰院凶涛QAQ10 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
科技大视界11 小时前
投资AI项目,传统尽调不够用了——李章虎律师拆解算法、数据、算力三大雷区
人工智能·算法·数据挖掘
郝学胜-神的一滴11 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法