冒泡排序
来源:互联网 发布:ui设计 前景 知乎 编辑:程序博客网 时间:2024/06/05 03:57
冒泡排序
思路:每遍历一次数组,往上冒一个数字,符合条件时去交换,不断地缩小范围,知道所有的数字都排序完;时间效率O(N^2);
初学C语言版本
<span style="font-size:18px;">#include<stdio.h>void sort(int a[], int len){int i, j, tmp;for (i = 0; i<len - 1; i++){for (j = 0; j<len - i - 1; j++){if (a[j]<a[j + 1]){tmp = a[j];a[j] = a[j + 1];a[j + 1] = tmp;}}}for (i = 0; i<len; i++){printf("%d ", a[i]);}printf("\n");}int main(){int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };sort(a, sizeof(a) / sizeof(a[0]));return 0;}</span>
初学C++版本
思路如上:
代码如下:
<span style="font-size:18px;">#include<iostream>using namespace std;void BubbleSort(int* arr,int len){if (arr == NULL && len <= 0)return;for (int i = 0; i < len - 1; ++i){for (int j = 1; j < len-i; ++j){if (arr[j-1] > arr[j])swap(arr[j-1], arr[j]);}}}void TestBubbleSort(){int array[10] = { 2, 9, 5, 8, 3, 6, 1, 7, 4, 0 };BubbleSort(array, 10);Print(array, 10);}</span>
C++版本的优化
<span style="font-size:18px;">void BubbleSort_B(int* arr, int len){if (arr == NULL && len <= 0)return;bool exchange = false;for (int i = 0; i < len - 1; ++i){for (int j = 1; j < len-i; ++j){if (arr[j-1] > arr[j]){swap(arr[j-1], arr[j]);exchange = true;}}//当排序一趟后exchange=false,没有变化,那说明不用再去排序了,直接返回;if (exchange == false)return; //反之要将 exchange的初始值false置回来,继续排序;exchange = false;}}//测试用例,通过调试俩个函数调用此数组我们可以看到优化版本只需要排序一趟即O(N),而原生版本时间效率为O(N^2);void TestBubbleSort_B(){int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //调用上面的初级版本BubbleSort(array, 10);Print(array, 10); //调用优化版本BubbleSort_B(array, 10);Print(array, 10);}</span>
1 0
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- Windows10+Ubuntu双系统安装[多图]
- Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境
- 勘误 win7x64下对OpenProcedure的ObjectHook
- linux下的分段分页----地址映射
- 35个非主流开源数据库 你知道吗?
- 冒泡排序
- DX学习笔记(建立三角形图元)
- HTML5中canvas画图之绘制路径
- 微信 "{"errcode":-1,"errmsg":"system error"}"
- udp包头解析
- 1. 打印100~200 之间的素数 2. 输出乘法口诀表 3. 判断1000年---2000年之间的闰年
- IOS UITableView删除增加操作
- 偏好设置(NSUserDefaults)
- js中bind、call、apply函数的用法