【算法导论】冒泡排序法
来源:互联网 发布:java 递归算法阶乘 编辑:程序博客网 时间:2024/05/20 02:54
冒泡排序法
时间复杂度:O(n*n)
基本思想:从数组最后一个元素开始,依次与前一个元素比较,若比前一个元素小,则与之交换位置,然后再与当前前一个元素比较,直到遇到比它大的元素为止。例如:假设数组为:a[5]={3,4,2,5,1};则运算过程为:首先1与5比较,由于1<5,从而交换位置,数组变为a[5]={3,4,2,1,5};然后1与当前前一个元素2比较,一直重复上述操作,经过一次循环后,数组变为a[5]={1,3,4,2,5};第二次循环从倒数第二个元素开始……,总共循环n-1次就可以得到正确结果。总的来说,首先将最小的元素放在数组前面,然后放次最小的元素,依此类推。上述过程的图解为:
3425134215341253142513425注:这里的红色为要进行比较的元素。
具体实现如下:
#include<stdio.h>void BubbleSort(int* arrayA,int n);void main(){int arrayA[]={2,3,5,6,2,7,1,5};int n=sizeof(arrayA)/sizeof(int);BubbleSort(arrayA,n);for(int i=0;i<n;i++)printf("%d ",arrayA[i]);}void BubbleSort(int* arrayA,int n){for(int i=0;i<n-1;i++){for(int j=n-1;j>i;j--)//j>i即可是因为前面的元素已经排好了{int temp=0;if(arrayA[j]<arrayA[j-1]){temp=arrayA[j];arrayA[j]=arrayA[j-1];arrayA[j-1]=temp;}}}}
注意:我是在vs2008上运行的,与vc 6.0有点区别,主要是循环体中的循环变量的作用域,出错体现在循环变量的重复定义上。例如:在vs2008或vs2010上,程序为:
#include<stdio.h>
void main()
{
int i=0;
for(int i=0;i<5;i++)
printf("%d ",i);
}
则在VC 6.0上需改为:
#include<stdio.h>
void main()
{
int i=0;
for(i=0;i<5;i++)
printf("%d ",i);
}
原文:http://blog.csdn.net/tengweitw/article/details/9707525
作者:nineheadedbird
- 【算法导论】冒泡排序法
- 算法导论-排序-冒泡法
- 算法导论 之 冒泡排序[C语言]
- 算法导论-冒泡排序-C语言版
- 学习算法导论——冒泡排序
- 一头扎进算法导论-冒泡排序
- 算法导论排序算法之冒泡排序(三)
- 冒泡排序算法分析——《算法导论》学习笔记
- 算法:冒泡排序法
- 算法-冒泡排序法
- [算法]:冒泡排序法
- 冒泡法排序算法
- <算法>冒泡排序法
- 排序算法----冒泡法
- 【算法导论-006】冒泡排序及其优化(BubbleSort)
- 《算法导论》5、冒泡排序实现(C++)
- 算法导论学习日记(6)冒泡排序
- 排序算法--冒泡排序法
- system3之:6-NFS服务
- Android 开发时要注意的问题
- libcurl post/get上传下载文件 以及断点下载(操作libcurl 实现断点下载(续点续传))
- 网易 风云总结编程思想
- Win7 VS2005开发winCE,对画框保持显示
- 【算法导论】冒泡排序法
- UVa:10066 The Twin Towers
- Android组件篇--ProgressBar(二)改变滚动条样式
- [windows编程]中文转拼音类-得到拼音首字母
- system3之:5-FTP服务
- 判断一个点是否在给定的凸四边形内
- 2007 ——平方和与立方和
- 面对MS SQL 新的管理组件——SMO
- 开开心心每一天