排序算法之冒泡排序
来源:互联网 发布:口红小样淘宝可以买不 编辑:程序博客网 时间:2024/04/29 13:50
冒泡排序就是把小的元素往前调或者把大的元素往后调,即小的元素逐渐“冒泡”,较大的元素逐渐“沉底”。其中比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,则不交换;如果两个元素不相等,则需要交换。由于交换是相邻元素,则两个相等元素的前后顺序并没有发生变化,所以冒泡排序是一种稳定排序算法。
首先介绍一种类似于冒泡排序的算法,实际交换为i和j的元素,而不是j和j + 1 的元素,从而导致算法不稳定,即两个相等元素的前后顺序发生变化。
1.算法思路:
设待排序数组为a[n],设置两个标志i和j,i表示当前比较元素,j表示逐个与i元素相比较的下标。假设交换为较小的冒泡,即i次循环结果第i个较小的元素确定。
2.举例说明:
设数组a的元素为:1 8 4 6 9 4(*) 2 (说明:(*)是为了区别两个相等元素
第一趟:i = 0 ;j 从1开始; 因a[i] < a[j],则j++; 其结果为:1 8 4 6 9 4(*) 2
第二趟:i = 1;j 从2开始;a[i] = 8;a[j] = 4;因a[i] > a[j],交换为:a[i] = 4;a[j] = 8;j++;最终为:1 2 8 6 9 4(*) 4 (不稳定)
.......
第六趟:i = 5;结果为:1 2 4(*) 4 6 8 9
程序如下:
void BubbleSort(int a[],int n){ int i,j; for(i = 0;i < n - 1;i++) { for(j = i + 1; j < n;j++) { if(a[i] > a[j]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } }}
其次给出一般冒泡排序算法的例子:
第一趟:1 8 4 6 9 4(*) 2 -> 1 4 6 84(*) 2 9
第二趟:1 4 6 8 4(*) 2 9 -> 1 4 64(*) 2 8 9
......
第六趟:1 4 2 4(*) 6 8 9 -> 1 2 4 4(*) 6 8 9
程序如下:void BubbleSort2(int a[],int n){ int i,j; for(i = 0;i < n - 1;i++) { for(j =0; j < n - i - 2;j++) { if(a[j] > a[j+1]) { int temp = a[j] a[j] = a[j+1]; a[j+1] = temp; } } }}
再次对于一些基本有序的可以通过查看是否有交换来终止循环。
程序如下:void BubbleSort2(int a[],int n){ int i,j; bool flag = true; for(i = 0;i < n - 1 && flag;i++) { flag = false; for(j =0; j < n - i - 2;j++) { if(a[j] > a[j+1]) { int temp = a[j] a[j] = a[j+1]; a[j+1] = temp; flag = true; } } }}
最后,其实我们可以同时从头和从尾开始比较,每次循环可以确定两个元素的位置,从而提高排序的速度。
程序如下:void BubbleSort3(int a[],int n){ int i,j; int k = 0; bool flag = true; while(flag) { flag = false; for(j = k; j < n - 2 - k;j++) { i = n - j - 1; if(a[j] > a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; flag = true; } if(a[i] < a[i-1]) { int temp = a[i]; a[i] = a[i-1]; a[i-1] = temp; flag = true; } } k++; }}
总之,冒泡排序是比较简单易懂的排序算法,是需要基本掌握的。
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 【排序算法】之冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 排序算法之-冒泡排序
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- strdup tolower toupper 实例
- 【7gyy】小编分享下Win7系统如何安装打印机
- java多播
- 20130808
- 搞了一天公交换乘算法,最近想做个公交app(sench touc),先把人家思路弄这里。。。
- 排序算法之冒泡排序
- ssh+DB2+timestamp+date
- gSOAP 源码分析(二)
- python hashlib模块
- Solution to BEA-090870 The realm myrealm failed to be loaded
- xml学习笔记
- 杭电2094-产生冠军
- Visual Studio安装项目中将用户选择的安装路径写入注册表的方法
- weblogic install windows服务