基础算法之四--排序: 之冒泡排序
来源:互联网 发布:兰大网络与教育学院 编辑:程序博客网 时间:2024/05/01 07:57
冒泡排序,是所有排序中用的最多和最易想起的一种排序算法。
其排序思想: 对未排序的相邻元素进行两两比较,找出未排序元素中的最值,并将其置入应有位置。
算法特点:
1) 一次遍历,即可在未排序元素中,找到一个最值(最大值或最小值)
2) 当进行第i次遍历时(以第0次为出发点),说明已经遍历了i次,因此已经对i个元素排好了序。
3) 在未排序元素中寻找最值时,按由小到大次序寻找,可找到最大值
按由大到小次序寻找,可找到最小值
程序代码:
1)首先确定最小值
// R[0...n-1] 为待排数组// 先确定最小值void BubbleSort(int R[],int n){int i,j;int t; // 用于交换的临时变量BOOL bExchage;// 交换标志for (i=0;i<n-1;i++) // 最多做n-1趟排序{bExchage=FALSE;// 已经比较了i趟,因此,已经有i个有序 还有 n-i个无序 // 从大到小,最先确定的是最小值for (j=n-2;j>=i;j--) // R[0...i-1] 有序 R[i...n-1]无序{if (R[j+1]<R[j]){t=R[j+1];R[j+1]=R[j];R[j]=t;bExchage=TRUE;}}if (!bExchage) // 本趟未发生交换,则提前终止算法return;}}
2)首先确定最大值
// R[0...n-1] 为待排数组// 先确定最大值void BubbleSort(int R[],int n){int i,j;int t; // 用于交换的临时变量BOOL bExchage;// 交换标志for (i=0;i<n-1;i++) // 最多做n-1趟排序{bExchage=FALSE;// 已经比较了i趟,因此,已经有i个有序 还有 n-i个无序 // 从小到大,最先确定的是最大值for (j=0;j<=n-i-2;j++) // R[0...n-(i+1)] 无序 R[n-i...n-1]有序{if (R[j+1]<R[j]){t=R[j+1];R[j+1]=R[j];R[j]=t;bExchage=TRUE;}}if (!bExchage) // 本趟未发生交换,则提前终止算法return;}}
下面两个为参考程序:R[0]用作交换单元
1)
//R[0]暂存单元 R(1...n) 是待排序文件, 对R做冒泡排序1) 先保存最小值void BubbleSort(SeqList R){int i,j;BOOL bExchage;// 交换标志for (i=1;i<n;i++) // 最多做n-1趟排序{bExchage=FALSE;for (j=n-1;j>=i;j--) //R[0]为暂存单元 R[1...i-1] 有序 R[i...n]无序{if (R[j+1].key<R[j].key){R[0]=R[j+1];R[j+1]=R[j];R[j]=R[0];bExchage=TRUE;}}if (!bExchage) // 本趟未发生交换,则提前终止算法return;}}
2)
2) 先保存最大值void BubbleSort(SeqList R){int i,j;BOOL bExchage;// 交换标志for (i=1;i<n;i++) // 最多做n-1趟排序{bExchage=FALSE;for (j=1;j<=n-i;j++) //R[0]为暂存单元 R[1...n-(i-1)] 无序 R[n-(i-2)...n]有序{if (R[j+1].key<R[j].key){R[0]=R[j+1];R[j+1]=R[j];R[j]=R[0];bExchage=TRUE;}}if (!bExchage) // 本趟未发生交换,则提前终止算法return;}}
- 基础算法之四--排序: 之冒泡排序
- 算法四之冒泡排序
- 算法四之冒泡排序
- 基础算法之冒泡排序
- 算法基础之冒泡排序
- 算法基础之冒泡排序
- 基础算法之 冒泡排序
- 算法基础之排序篇-冒泡排序
- 基础算法之排序(1)--冒泡排序
- 基础算法--排序: 之冒泡排序
- 排序算法_C++(四)交换排序之冒泡排序
- 排序算法四:交换排序之冒泡排序
- 排序算法四:交换排序之冒泡排序
- 排序算法四:交换排序之冒泡排序
- iOS算法(四)之冒泡排序
- 排序算法基础篇交换排序之冒泡排序
- Java基础之冒泡排序算法
- Java基础之冒泡排序算法
- 获得网站跳转地址
- HTML5应用——生日快乐动画
- php发送get、post请求的几种方法
- .net文件请求iis的回话的工作原理
- Java回调函数的理解
- 基础算法之四--排序: 之冒泡排序
- [HTML]URL(统一资源定位器)
- [汇总]Web开发中需要了解的东西
- mysql 表数据操作
- css+div 页面布局要点整理
- emacs 入门
- java 5线程池
- C#经典编程——(生活中的猫叫,老鼠跑,主人被吵醒)
- Oracle中dual表的用途介绍