黑马程序员——C语言基础——冒泡排序算法探究
来源:互联网 发布:windows上的qt库吗 编辑:程序博客网 时间:2024/05/19 15:24
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
在整理前几天的C语言学习笔记的时候,看到了这个冒泡排序算法的问题 。
在复习这块内容试着编写一个函数时,我遇到了一些问题。让我们来看看我是怎么解决他们的。
1.首先来看一段标准的冒泡排序算法的代码:
#include <stdio.h>void sort(int *a,int len){ int t; for(int i = 0; i < len; i++){ for(int j = 0; j < len - i - 1; j++){ if(a[j] > a[j + 1]){ t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } }}运行后的有效步数为13次,此标准方法将相邻的数值两两交换,直到最后排序完成。
2.再来看看作为C语言初学者所编写的冒泡排序算法
void showArray(int *array, int len){ for (int i = 0, max = len; i < max; i++) { printf("%d\t", array[i]); }}int main(int argc, const char * argv[]) { //定义数组 int array[] = {23, 56, 17, 24, 89, 10, 16, 57, 88, 84}; int t = 0; //循环数组,每次取出一个值进行循环 for (int i = 0, max = 10; i < max; i++) { for (int j = 0, max = 10; j < max; j++) { if( array[i] < array[j]){ t = array[j]; array[j] = array[i]; array[i] = t; showArray(array, 10); printf("\n"); } } } for (int i = 0, max = sizeof(array) / sizeof(array[0]); i < max; i++) { printf("%d\t", array[i]); }}上面提到比较标准的冒泡排序算法大概用了17步处理,来完成排序。
而这段方法则执行了22步处理,效率几乎下降了30%!是什么原因造成了这个现象?
通过分析发现第一种方法只在排序中,完成了那些必要的数值交换操作。
而第二种方法的数值交换记录如下:
56231724891016578884892317245610165788842389172456101657888417892324561016578884172389245610165788841723248956101657888417232456891016578884102324568917165788841017245689231657888410172356892416578884101723248956165788841017232456891657888410162324568917578884101617245689235788841016172356892457888410161723248956578884101617232456895788841016172324565789888410161723245657888984101617232456578489881016172324565784888910161723245657848889通过记录可以发现由于初始数据的顺序中,有个别较大数字位于数组前几项。
而这种算法由于每次都会与自身比较、与数值交换后的数组项进行比较。
由此导致了算法的冗余。并且这种冗余还会随着数据随机性而不断加大。
可见,算法的重要性无处不在。一个完善的算法不仅会使代码量减少,代码逻辑清晰。
更可能会减小内存消耗,提升运行速度。甚至会改善我们APP的用户体验。
0 0
- 黑马程序员——C语言基础——冒泡排序算法探究
- 黑马程序员——c语言基础:冒泡排序、选择排序和折半查找
- 黑马程序员——C语言的冒泡排序
- 黑马程序员——C语言的冒泡排序
- 黑马程序员——C基础之冒泡排序
- 黑马程序员——java基础排序算法:选择排序、冒泡排序和插入排序
- 黑马程序员——C语言基础--数组“冒泡排序”和“选择排序”详解及经典例子
- 黑马程序员—Java基础学习笔记之排序算法:选择排序&冒泡排序
- 黑马程序员——C语言基础
- 黑马程序员——C语言基础
- 黑马程序员——C语言基础
- C语言——算法排序(冒泡排序)
- 黑马程序员——浅谈冒泡排序
- 黑马程序员——冒泡排序
- 黑马程序员——C语言基础篇---基础语法
- 黑马程序员——C语言基础---基础语法
- 基础算法 —— 冒泡排序算法
- 黑马程序员——Java基础——选择排序和冒泡排序
- PhoneGap loadUrl监听
- FreeSWITCH技巧:notify与message-waiting
- 9种企业常用的Linux和Unix服务器
- eclipse提交项目到github
- mysql in 子查询 效率慢 优化
- 黑马程序员——C语言基础——冒泡排序算法探究
- 调用子屏幕
- 在HTML中使用JavaScript和CSS
- libgsc(Game Server Communication Library)(五)
- 兔子--sdk版本与api的对应关系
- Sublime Text 3 快捷键汇总
- 图片上加热点,可以加多个
- 4.1.2 Longest Valid Parentheses
- 常用带代码片段