学习几种排序算法
0. 记录一下 测试数据 和 swap 函数

#include <stdio.h> void swap(int *p_a, int *p_b) { *p_a = *p_a ^ *p_b; *p_b = *p_a ^ *p_b; *p_a = *p_a ^ *p_b; } void print_arr(int arr[], int len) { int ix = 0; for (ix = 0; ix < len; ix++) { printf("%3d ", arr[ix]); } printf("\n"); } void main() { //int arr[] = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 99}; int arr[] = {3, 2, 1, 4}; int len = sizeof(arr) / sizeof(arr[0]); print_arr(arr, len); /* 执行对应的排序函数 */ select_sort(); print_arr(arr, len); }
1. 记录一下 冒泡排序的代码
void bubble_sort(int arr[], int n) { int ix, jx;
// n个元素,需要排序的元素个数是n-1个 for (ix = 0; ix < n - 1; ix++) {
// 每次排序,需要进行判断相邻元素的大小,最多的一次是 n-1次判断,最少的一次是1次 for (jx = 0; jx < n - 1 -ix; jx++) { if (arr[jx] < arr[jx + 1]) { swap(&arr[jx], &arr[jx + 1]); } } } }
执行结果:
$ ./a.out
len=14
22 34 3 32 82 55 89 50 37 5 64 35 9 99
99 89 82 64 55 50 37 35 34 32 22 9 5 3
2. 选择排序
void select_sort(int arr[], int n) { int ix, jx, key; // n个元素,需要对n-1个元素进行排序 for (ix = 0; ix < n - 1; ix++) { key = ix; // 假设ix对应的元素是最小的,在内循环结束之后,ix对应的位置放 比较之后最小的数值 for(jx=ix+1; jx < n; jx++) { if (arr[jx] < arr[key]) { key = jx; // 遍历一次,记录最小的元素的下标 } } if (key != ix) // 需要交换,再交换 { swap(&arr[key], &arr[ix]); } } }
3. 插入排序,默认第0个是排好顺序的,从i=1 开始插入,
void insert_sort(int *p, int n) { int ix, jx, key; for(ix = 1; ix < n; ix++) { key = p[ix]; for (jx=ix-1; (jx >= 0) && (p[jx] > key); jx--) // 如果比key大,说明找到了正确的位置,退出内循环后,把key 插入 { p[jx+1] = p[jx]; } p[jx+1] = key; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)