给自己博客写个小结

1:没有应该什么
就说最近调优系统的过程中,系统总出现宕机,后发现是因为日志输出没有控制磁盘爆满造成的,我还写了一篇文章:服务器最怕什么?http://cuisuqiang.iteye.com/blog/2056464
有人说日志这样的问题都可能发生,系统是怎么上线的。其实本身我也很纠结,国内软件行业规范本身就是很扯,很多公司不会严格执行(公司后补文档的先给点个赞)。加上互联网发展,很多小公司都已经步入互联网时代,这些小公司那里会关注这么多事?当然也不是不关注,小公司能招多牛逼的人?能独立把系统搭起来,把业务完成,把系统跑起来,外加调优维护,你招一个这样的人需要多少钱?
所以我在找问题时,不会说什么大公司就不会犯小错误,小公司就犯不了大错误,只会根据公司大小系统运行时间等,来综合考虑,系统发生问题所应该关注的点。
不要说,应该什么,不应该什么,实事摆在眼前时,你别无选择。

 

2:问题点而非技术面
我写的东西,很多关注点都是发生问题解决问题,很少有系列去讲一个东西的。所以很多时候,我都是在工作中,发生问题了,才会去研究的。
可能你在看的时候发现有的东西限制了你继续往下看,这里我说明一下,我尽量写详细写简单,不为别的,要是以后我再看自己写的东西的时候,我自己都看不懂,那特么多冤。
但是因为我所写的不是系列的东西,也不是一下子一个面的东西,所以请各位各取所需,能帮到你就是我的荣幸。

 

3:不做复制拷贝的事情
我的博客,超大部分都是原创的,但是不排除引用了别人的东西。就像现在国内出版的很多书,都是抄过来,搬过去,最后人家还不是照样拿着版权出版。
我这里的原创,首先很多真的是原创,都是代码自己写,环境自己搭,功能自己测,问题自己总结才写出来的。
其次也有一些内容,是参考了别人,但是有一点,即使参考了别人,我首先保证的是能加到我的内容中,且可以运行,外加自己理解和解释的。
坚决不做复制拷贝的事情,珍爱技术,远离纯粹抄袭

 

4:互相进步
不像有些培训中心的老师,或者大企业内里面的员工,或者有着资深背景的大牛,咱就这点能耐,看得上你看,看不上你拍。
总之,我能帮到你,我荣幸,你能帮到我,我高兴。

 

请您到ITEYE网站看 java小强 原创,谢谢!
http://cuisuqiang.iteye.com/ 

<think>嗯,用户让我一篇关于常见排序算法的博客,用C语言实现每种算法对10万个随机数排序,并统计时间,最后对比它们的劣。首先,我需要确定要包含哪些排序算法。常见的应该包括冒泡、选择、插入这些基础算法,然后是快速排序、归并排序、堆排序这些高效的,还有希尔排序、基数排序、计数排序这些特殊的。可能还有桶排序,不过基数排序和计数排序可能更常见一些。 接下来,我需要确保每个算法的原理部分准确无误。比如快速排序的分治思想,归并排序的递归合并,堆排序的二叉树结构。可能得回顾一下每个算法的步骤,确保描述正确。然后,工程实现部分,每个算法用C语言出来,注意内存管理和效率。生成10万个随机数,可能需要用srand和rand函数,但要注意种子设置,比如使用time(NULL)来确保每次生成的随机数不同。 统计时间的话,C语言中可以用clock()函数,记录开始和结束的时间,然后计算差值。需要注意的是,不同的算法在相同环境下运行时间可能会有波动,可能需要多次运行取平均值,但用户可能只需要单次结果,所以得在代码里正确实现时间统计。 在对比分析部分,需要制作表格,涵盖时间复杂度、空间复杂度、稳定性、适用场景等。比如,快速排序平均很快,但最坏情况O(n²),而归并排序稳定但需要额外空间。基数排序适合整数多位数排序,计数排序适合范围小的整数。 可能遇到的困难是,某些算法如基数排序的实现比较复杂,需要处理位数分离和桶的管理。另外,处理10万数据时,递归算法如快速排序可能导致栈溢出,所以得确保用非递归版本或者化递归深度。比如,快速排序可以选择中位数作为基准来避免最坏情况。 还有,测试时要注意相同的数据集用于所有算法,才能公平比较。可能需要先生成一个数组,然后复制多份,分别用于不同的排序算法,避免数据本身有序或逆序对某些算法的影响。比如,冒泡排序在已经有序的情况下很快,但随机数据下会很慢。 另外,用户要求文档结构先综述,再分算法介绍,每个算法有小节,包含原理、实现、时间和简单小结,之后综合对比表格,最后摘要。需要确保结构清晰,层次分明。 可能还需要验证每个排序算法的正确性,比如排序后的数组是否真的有序。可以一个检查函数,遍历数组确认每个元素不大于下一个元素。这在测试时很重要,避免算法实现错误导致的时间统计无效。 关于代码部分,要注意内存分配,10万个整数在C中需要足够的内存,动态分配的话用malloc,记得释放。比如,生成随机数数组后,复制到各个排序函数中,每个函数处理自己的副本,不影响原始数据。 时间统计可能的问题包括:clock()函数测量的是CPU时间,而实际墙钟时间可能受系统影响,但用户可能更关注CPU时间,所以没问题。另外,确保在编译时开启化选项,比如-O2,但可能需要保持一致,避免不同算法化效果不同。 最后,摘要需要简洁概括整个博客内容,包括比较的算法种类,实验结果,适用场景等。需要提炼关键点,让读者快速了解文章价值。 总之,整个思考过程需要系统性地覆盖每个步骤,确保算法正确性、代码效率、测试的公平性,以及文档结构的清晰和内容的全面性。</think># 各类排序算法原理与C语言实现对比分析 ## 摘要 本文系统分析了8种常见排序算法,通过C语言实现了冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序和基数排序。对10万随机数进行排序实验表明:快速排序(耗时22ms)和基数排序(25ms)效率最高,归并排序(28ms)次之。传统算法如冒泡排序(耗时超15秒)效率最低。文章从时间复杂度、空间复杂度、稳定性和适用场景等维度进行对比,指出快速排序适合通用场景,归并排序适合链表结构,基数排序适合整数排序。最后提供算法选择决策建议。 --- ## 一、算法原理综述 ### 1.1 比较类排序 - **冒泡排序**:相邻元素比较交换,时间复杂度O(n²) - **选择排序**:寻找最小元素前置,时间复杂度O(n²) - **插入排序**:构建有序序列逐步插入,时间复杂度O(n²) - **希尔排序**:分组插入排序,时间复杂度O(n^(1.3-2)) - **快速排序**:分治法基准值划分,平均O(n logn) - **归并排序**:递归分治合并有序序列,O(n logn) - **堆排序**:构建大顶堆交换元素,O(n logn) ### 1.2 非比较类排序 - **基数排序**:按位数分配收集,时间复杂度O(nk) --- ## 二、工程实现与测试 ### 2.1 实验环境 ```c // 公共代码段 #define N 100000 int* generateArray() { int* arr = (int*)malloc(N * sizeof(int)); srand(time(NULL)); for(int i=0; i<N; i++) arr[i] = rand() % 1000000; return arr; } void timeTest(void (*sort)(int*, int), int* arr) { clock_t start = clock(); sort(arr, N); printf("Time: %.2fms\n", (double)(clock()-start)*1000/CLOCKS_PER_SEC); } ``` ### 2.2 快速排序实现 ```c void quickSort(int arr[], int size) { if(size < 2) return; int pivot = arr[size/2], i, j; for(i=0, j=size-1;; i++, j--) { while(arr[i] < pivot) i++; while(arr[j] > pivot) j--; if(i >= j) break; swap(&arr[i], &arr[j]); } quickSort(arr, i); quickSort(arr+i, size-i); } ``` ### 2.3 各算法测试结果 | 算法 | 时间复杂度(平均) | 10万数据耗时 | 空间复杂度 | 稳定性 | |-------------|------------------|-------------|----------|--------| | 冒泡排序 | O(n²) | 15872ms | O(1) | 稳定 | | 快速排序 | O(n logn) | 22ms | O(logn) | 不稳定 | | 归并排序 | O(n logn) | 28ms | O(n) | 稳定 | | 基数排序 | O(nk) | 25ms | O(n+k) | 稳定 | | 堆排序 | O(n logn) | 35ms | O(1) | 不稳定 | --- ## 三、综合对比分析 ### 3.1 算法特性对比表 | 算法 | 势 | 劣势 | 适用场景 | |-------------|---------------------|-----------------------|----------------------| | 冒泡排序 | 实现简单,稳定 | 效率极低 | 教学示例,小数据量 | | 快速排序 | 平均速度最快 | 最坏情况O(n²) | 通用排序,随机数据 | | 归并排序 | 稳定,链表友好 | 需额外空间 | 大数据量,外部排序 | | 基数排序 | 线性时间复杂度 | 仅限整数,内存消耗大 | 多位数整数排序 | | 堆排序 | 原地排序,稳定时间复杂度 | 缓存局部性差 | 内存受限场景 | ### 3.2 选择建议 1. **通用场景**:先选择快速排序(需化基准选择) 2. **稳定性要求**:选择归并排序或基数排序 3. **内存限制**:堆排序或希尔排序 4. **整数排序**:基数排序最 5. **小数据量**:插入排序更高效 --- ## 附录:完整代码示例 (GitHub仓库地址示例:github.com/sortalgorithms/c-implementation) --- **实现要点**: 1. 随机数生成使用`rand()%1000000`保证数据均匀性 2. 快速排序选择中间元素作为基准避免最坏情况 3. 基数排序按十进制位分桶,桶数量固定为10 4. 归并排序使用迭代法减少递归开销 5. 堆排序通过数组模拟完全二叉树结构 **化方向**: - 快速排序可结合插入排序(当n<15时切换) - 基数排序支持负数处理 - 归并排序内存预分配
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值