数据结构跑路篇——冒泡排序
来源:互联网 发布:win7照相机软件 编辑:程序博客网 时间:2024/06/06 02:48
1、原理分析:
顾名思义,就是一次循环像冒泡一样,两两比较,最小的浮上来或者最大的沉下去;分析外层控制次数为n次,内层控制剩余比较次数为n-(i+1)次;
图片示意:
1.外层为n次
2.内层为剩余循环次数,所以应该从0开始,运行次数为n-(i+1)
2、代码展示:
#include<stdio.h>void bubble(int *arr,int length){ int i,j,tmp; #外层次数,所以为n次 for(i=0;i<length-1;i++){ #内层剩余次数,所以从0开始,总数为length-i-1 for(j=0;j<length-i-1;j++){ if(arr[j]>arr[j+1]){ tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } }int main(){ int z; int arr[]={5,4,8,0,9,100}; int length = sizeof(arr)/sizeof(arr[0]); bubble(arr,length); for(z=0;z<length;z++){ printf("%d\n",arr[z]); } return 0;}
3.复杂度分析:
- 每一次循环需要n-1次;所以总共次数应该是
∑ni=1(i−1) 次,即n(n-1)/2;所以时间复杂度为O(n2 ) - 最好的情况为全部正序O(n);最坏的情况为全部逆序O(
n2 )
4.改进版:
- 原因:假设运行时,一次loop,后面的全部正序没有调换顺序,接着第二次loop还要你一个个判断,这样不就浪费了时间吗?
- 采取方式:可以设置一个开关,loop时候关闭,如果发生交换则为开启;那么久判断这个开关,如果关闭就没有任何交换,即正序排列,否则继续排序;
- 代码实现:
#include<stdio.h>#define True 1#define False 0void bubble(int *arr,int length){ typedef int bool;#定义布尔 int i,j,tmp; bool flag = True; for(i=0;i<length-1 && flag;i++){ #优化运行次数 flag = False; for(j=0;j<length-i-1;j++){ if(arr[j]>arr[j+1]){ tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; flag = True; } } } }int main(){ int z; int arr[]={9,1,8,5,4,3}; int length = sizeof(arr)/sizeof(arr[0]); bubble(arr,length); for(z=0;z<length;z++){ printf("%d\n",arr[z]); } return 0;}
阅读全文
0 0
- 数据结构跑路篇——冒泡排序
- 数据结构——冒泡排序
- 冒泡排序——数据结构
- 【数据结构】单链表—冒泡排序
- 数据结构【排序算法】——冒泡排序
- C#版数据结构——冒泡排序
- 数据结构学习(十五)——冒泡排序
- 数据结构——简单的冒泡排序
- 数据结构学习8——冒泡排序
- 数据结构与算法——冒泡排序
- 数据结构制冒泡排序算法—PHP
- 数据结构 — 冒泡排序以及其优化
- 【数据结构】——排序算法——2.1、冒泡排序
- 复习数据结构:排序算法(二)——冒泡排序
- 数据结构例程——交换排序之冒泡排序
- 数据结构之排序(二)—— 冒泡排序
- C++学习之数据结构及算法——冒泡排序
- 开始学数据结构——(二):冒泡排序
- H5 按钮抖动效果
- 第一天纪念
- 设置模式(3)——策略模式
- Java实现折半插入排序
- SVN 安装部署并设置为自动同步到实际的项目
- 数据结构跑路篇——冒泡排序
- UDP简单例子
- VGG Face测试的Python版本
- 动态顺序表
- 一、python环境搭建
- Python+Selenium注册登录各个功能流程验证脚本
- HTTP method POST is not supported by this URL错误的解决方案
- 配置单臂路由器
- J