【每天一点算法】冒泡排序

今天我的内心受到了打击,原来我是个彻头彻尾的垃圾,一个冒泡排序写了我三个小时。以后要经常找点算法的题目来练练手。(蓝色是忧伤的颜色?)
今天我就把这道醍醐灌顶的冒泡排序算法总结一下。

一个上升排序,不过,今天这个总结不仅仅是算法,还有vim练习,以及makefile初识。
用到的资料: 《啊哈!算法》、《学习vi和vim编辑器》、《跟我一起写 Makefile》。
用到的软件:ubuntu操作系统、gcc-4.4.7、vim-7.3.429。
首先确定需要的函数,main函数不用说,还有一个就是Sort_Up函数,我们把main放在main.c里,Sort_Up放在sort.c里,这是一个上升排序,如下所示:
main函数(注释掉的部分是桶排序)

  1 #include <stdio.h>
  2 #include "sort.h"
  3 int main(void)
  4 {
  5 /* 
  6         int a[1001], i, j, t; 
  7         
  8         for (i = 0; i < 1001; i++){ 
  9                 a[i] = 0;
 10         }                       
 11                                 
 12         for (i = 0; i < 5; i++){
 13                 scanf("%d", &t); 
 14                 a[t]++; 
 15         }
 16 
 17         for (i = 1000; i >= 0; i--){ 
 18                 for(j = 0; j < a[i]; j++){
 19                         printf("\n\n%d\n\n", i);
 20                 }
 21         }
 22 */
 23         int a[5], temp, i;
 24         for (i = 0; i < 5; i++){
 25                 scanf("%d", &temp);
 26                 a[i] = temp;
 27         }
 28         Sort_Up(a, 5);
 29         for(i = 0; i < 5; i++){
 30                 printf("\n\n%d\n\n", a[i]);
 31         }
 32 }

Sort_Up函数

  1 #include <stdio.h>
  2 #include "sort.h"
  3               
  4 void Sort_Up(int *array, int n)
  5 {  
  6         int i, j, temp;       
  7         for (i = 0; i < n - 1; i++){
  8                 for (j = 0; j < n - i - 1; j++){
  9                         if(array[j] > array[j + 1]){
 10                                 temp = array[j];
 11                                 array[j] = array[j + 1];
 12                                 array[j + 1] = temp;
 13                         }        
 14                 }       
 15         }
 16 }
这个函数的基本思想是这样的:一个数组中存放了一组数据,将第一个数据与第二个数据比较,如果第一个数据比第二个大,那么它们就交换,否则就不交换;接着第二个数据与第三个数据比较,如果第二个数据比第三个数据大,就将他们交换,否则不交换,以此类推,直到将最大的数据放在数组末端,到这时最大的数据找到了。然后开始找第二大的数据,从第一个开始仿照找第一大的方法去找第二大的数据,把它排到第二大的数据后面,以此类推直到把所有的数据排完序。在程序上的表现就是二级嵌套循环,第一级用来确定要寻找第几大数据排序,第二级用来寻找这个数据。 函数写完之后,我得到了三个文件:main.c、sort.c、sort.h,接下来要组织它们来写makefile文件,如下所示
  1 objects = main.o sort.o
  2 main : $(objects)
  3         cc -o  main $(objects) 
  4 main.o : main.c sort.h         
  5         cc -c main.c
  6 sort.o : sort.c sort.h        
  7         cc -c sort.c                
  8 clean:                                          
  9         rm main.o main 
这个文件的具体语法就不解释了,去耗子叔博客里找《跟我一起写 Makefile》,如果不知道耗子叔是谁,那你应该打开浏览器花一段时间去了解一下这位大神。

冒泡算法的核心是一个双重嵌套循环,这个嵌套循环的时间复杂度是 O ( N 2 ) O(N^2) O(N2),这是一个非常高的时间复杂度,所以它没有什么太大用处。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值