1、冒泡法
依次比较相邻的两个数,将小数换到前面,大数换在后面。
第一趟,过程如下概述:
首先,比较第1个和第2个数,将小数换前,大数换后。
然后,比较第2个数和第3个数,将小数换前,大数换后。
如此继续,比较第n个数和第(n + 1)个数,将小数换前,大数换后。
直至比较最后两个数,将小数换前,大数换后。
至此,第一趟结束,将最大的数换到了最末位。
第二趟:仍从第一对数开始比较(因为可能由于第一趟时第2个数和第3个数的交换后,使得第1个数不再小于第2个数),将小数换前,大数换后。
一直比较到倒数第二个数(倒数第一的位置上已经是最大的)。第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。
如此下去,重复以上过程,直至最终完成排序。
void bubble_sort(char *src) { int iLen = strlen(src); for (int j = iLen; j > 0; j--) { for (int i = 0; i < j - 1; i++) { if (*(src + i) > *(src + i + 1)) { char temp = *(src + i); *(src + i) = *(src + i + 1); *(src + i + 1) = temp; } } } } int main() { char arr[7] = {3, 6, 9, 1, 5, 2, 8}; bubble_sort(arr); for (int i = 0; i < 7; i++) { printf("%d ", arr[i]); } return 1; }
2. 选择法
每一趟从待排序的数据元素中选出最小(或最大)的一个元素;顺序放在已排好序的数列的最后;直到全部待排序的数据元素排完。
示例如下:
初始关键字 [49 38 65 97 76 13 27 49]
第一趟排序后 13 [38 65 97 76 49 27 49]
第二趟排序后 13 27 [65 97 76 49 38 49]
第三趟排序后 13 27 38 [97 76 49 65 49]
第四趟排序后 13 27 38 49 [76 97 65 49 ]
第五趟排序后 13 27 38 49 49 [97 65 76]
第六趟排序后 13 27 38 49 49 65 [97 76]
第七趟排序后 13 27 38 49 49 65 76 [97]
最后排序结果 13 27 38 49 49 65 76 97
void SelectSort(int br[],int n) { for(int i = 0; i < n; ++i) { int k = i; for(int j = i + 1; j < n; ++j) { if(br[k] > br[j])//br[k] 大于br[j],记下j, 并从br[j]开始继续和后面的元素比较 { k = j; } } if(k != i) //k发生过变化,说明br[k]是最小的,交换br[k]与br[i] { int temp = br[k]; br[k] = br[i]; br[i] = temp; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫