|
Posted on 2009-03-24 15:02 赞劲小子 阅读(782) 评论(1) 编辑 收藏 引用 所属分类: 算法设计与分析
#include "iostream.h" /**//** *冒泡排序 冒泡排序(Bubble Sorting)的基本思想是:设待排序n个元素存放在数组a[n]中,无序区范围 初始为(a(0),a(1),a(2),,a[n-1]),冒泡排序方法是在当前无序区内,从最上面的元素a[0]开 始,对每两个相邻的元素a[i+1]和a[i](i=0,1,,n-1)进行比较,且使值较小的元素换至值较大 的元素之上(若a[i]>a[i+1],则a[i]和a[i+1]的值互换),这样经过一趟冒泡排序后,假设最后下移 的元素为a[k],则无序区中值较大的几个元素到达下端并从小到大依次存放在a[k+1],a[k+2],a[n-1]中, 这样无序区范围变为(a[0],a[1],a[2],,a[k])。在当前无序区内进行下一趟冒泡排序。这个过 程一直到某一趟排序中不出现元素交换的动作,排序结束。整个排序过程最多执行n-1遍。这种排序 方法是通过相邻元素之间的比较与交换,使值较小的元素逐渐从后部移向前部(从下标较大的单元 移向下标较小的单元),就象水底下的气泡一样逐渐向上冒。故称为冒泡排序法。 **/ void bubble(int array[], int size);
int main(){ int array[10] = {7,6,8,5,10,9,2,4,3,1}; bubble(array,10); for(int i = 0; i < 10; i++) cout << array[i] << ' '; return 0; }
void bubble(int array[], int size){ for(int pass = 0; pass < size - 1 ; pass++ ) for(int j = 0 ; j < size - 1; j++) { int temp; if(array[j] > array[j + 1]){ temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } }
改进后的冒泡排序 改进思想:比如用冒泡排序将4、5、7、1、2、3这6个数排序。在该列中,第二趟排序结束后,数组已排好序,但计算机此时并不知道已经反排 好序,计算机还需要进行一趟比较,如果这一趟比较,未发生任何数据交换,则知道已排序好,可以不再进行比较了。因而第三趟比较还需要 进行,但第四、五趟比较则是不必要的。为此,我们可以考虑程序的优化。 为了标志在比较中是否进行了,设一个布尔量flag。在进行每趟比较前将flag置成true。如果在比较中发生了数据交换,则将flag置为false,在 一趟比较结束后,再判断flag,如果它仍为true(表明在该趟比较中未发生一次数据交换)则结束排序,否则进行下一趟比较。
#include "iostream.h" void bubble(int array[], int size);
int main(){ int array[10] = {7,6,8,5,10,9,2,4,3,1}; bubble(array,10); for(int i = 0; i < 10; i++) cout << array[i] << ' '; return 0; }
void bubble(int array[], int size){ bool tag; for(int pass = 0; pass < size - 1; pass++ ) { tag = true; for(int j = 0 ; j < size - 1; j++) {
int temp; if(array[j] > array[j + 1]){ temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; tag = false; } } if(tag == true) return ; } }
Feedback
# re: 冒泡排序以及改进 回复 更多评论
2012-04-19 20:06 by
英文名www.ie10.net
|