快速排序实践
自己复习算法刚开始对于快速排序还是有点迷糊,后来多看了两遍终于搞明白怎么回事了,这里记录下
下面是实例代码,用代码注释来说明吧
void QuickSort(int* a, int left, int right) { int ltemp = left; int rtemp = right; int f = a[left]; while (ltemp < rtemp) {
/*先从有变开始找,直到找到比key值小的值为止*/ while (ltemp < rtemp && a[rtemp] >= f) { --rtemp; } a[ltemp] = a[rtemp];/*在rtemp处挖个坑,把rtemp的值保存在ltemp位置上,rtemp暂时是空的坑*/
/*再从左到右扫描,直到找到比key值大的值为止*/ while (ltemp < rtemp && a[ltemp] <= f) { ++ltemp; } a[rtemp] = a[ltemp];/*这步是在ltemp处挖个坑(注意这地方的ltemp值已经改变),把ltemp的值保存在rtemp位置上,现在ltemp是空的坑*/
/*把控制的坑填满,当前空置的坑是ltemp,所以把key值赋给ltemp*/
a[ltemp] = f;
/*ltemp现在就相当于是key值,中间点了,后续的步骤是在以key值为中心,分别遍历左边和右边,直到所有的项都满足条件为止,下面的left,ltemp-1表示左半边 ,ltemp+1,right表示右半边*/
QuickSort(a, left, ltemp - 1); QuickSort(a, ltemp + 1, right); } } #define MAX_LEN 5 int _tmain(int argc, _TCHAR* argv[]) { int *a = new int[MAX_LEN]; memset(a, 0, MAX_LEN); srand(time_t(NULL)); for (int i = 0; i < MAX_LEN; i++) { a[i] = rand() % 1000; printf("%d ", a[i]); } printf("\n"); printf("开始排序\n"); int tick = GetTickCount(); QuickSort(a, 0, MAX_LEN - 1); printf("\n"); printf("排序用时:%d\n", GetTickCount() - tick); for (int i = 0; i < MAX_LEN; i++) { printf("%d ", a[i]); } system("pause"); return 0; }
下面再加个备注,本来在写代码的时候最后面那部分还没有搞明白,写博客增加注释的时候就突然都搞明白了;看来看会还不算会,写出来才算会,哈哈。有空还是要出来多分享分享,加油加油
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现