排序算法(四)冒泡排序及其优化
来源:互联网 发布:h5房卡麻将源码 编辑:程序博客网 时间:2024/05/16 17:39
基本思路:
冒泡排序的基本思路是通过元素的两两比较不断将较大值(升序)或则较小值(降序)移动序列的后面,类似于气泡向上冒的排序算法。
1、比较相邻两个元素大小,如若不符合要求则交换元素;
2、对整个序列做同样1的操作,最后的元素一定是当前比较的序列中最大(或最小)的元素;
3、重复以上操作除了上一次遍历的最后一个元素。
图解(升序):
我们可以根据冒泡排序原理写出代码:void BubbleSort(int arr[], int len)//升序{ int i = 0; int j = 0; for (i = 0; i < len; i++) { for (j =i+1; j <len ; j++) { if (arr[i] > arr[j]) { swap(arr[i], arr[j]); } } }
但是,如图所示,第七趟排完已经是有序,但是上面的代码,还会多走几趟,为了提高效率,我们可以优化以上代码,用一个标志位来标识某一趟是否有交换数据,如果某一趟没有一个数据进行交换,做说明已经有序,可以直接停止。
如下给出优化后的代码:
void BubbleSort(int arr[], int len)//升序{ int i = 0; int j = 0; int flag = 1;// for (i = 0; i < len && flag; i++) { flag = 0; //假设有序,经过一趟比较后若有序,则flag值不变,下趟可直接结束循环 for (j = i + 1; j <len; j++) { if (arr[i] > arr[j]) { flag = 1; //若发生交换,则改变flag的值 swap(arr[i], arr[j]); } } }}
测试代码如下:
int main(){ int arr[] = { 0,9,1,4,7,5,3,6,2,8 }; int len = sizeof(arr) / sizeof(arr[0]); BubbleSort(arr, len); for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl; system("pause"); return 0;}
阅读全文
0 0
- 排序算法(四)冒泡排序及其优化
- 冒泡排序算法及其优化
- 冒泡排序算法及其优化
- 冒泡排序算法及其优化
- 经典排序算法----冒泡排序算法及其优化(稳定)
- 排序算法之冒泡排序及其优化
- 冒泡排序算法及其简单优化算法
- 冒泡排序算法及其两种优化
- 冒泡排序及其优化
- 冒泡排序及其优化
- 冒泡排序及其优化
- 冒泡排序及其优化
- 冒泡排序及其优化
- 冒泡排序及其优化
- 冒泡排序及其优化
- 冒泡排序及其优化
- 冒泡排序及其优化
- 冒泡排序及其优化
- Linux 中的Core Dump设置与使用
- Eclipse中安装Java Swing图形界面开发插件windowbuilder
- 比较通用的文件下载方法
- android Canvas参考
- cocos2dx package.loaded
- 排序算法(四)冒泡排序及其优化
- 设置字符编码
- java程序导出jar、生成exe、生成安装包
- elasticsearch 使用scroll_id查询,为什么每次查询结果相同
- volatile关键字
- Linux内核配置选项
- 安装maven
- C#实现任意源组播与特定源组播
- linux常用命令精粹