基础算法-冒泡排序
来源:互联网 发布:主播过度劳累猝死知乎 编辑:程序博客网 时间:2024/05/25 18:11
冒泡排序:
思想:数组分为左右两部分,无序区,和有序区,开始数全在无序区,有序区长度为0
从无序区开始位置到无序区结束位置遍历,相邻的两个数相互比较,如果当前的数比它后面的数大,那么就交换他们的位置,这样第一遍后,就将最大的数放到了无序区最后面的位置,此时也就是数组的最后面,现在有序区有一个数,
然后第二遍遍历则把无序区剩下的数的最大值交换到了此时无序区最后面的位置,也就是数组的倒数第二个位置,这样每次把无序区间剩余数的最大值交换到无序区的最后面,与之前有序区构成新的有序区。
这里对于[5 4 2 3 1]模拟一遍过程
[5 4 2 3 1][]
[4 5 2 3 1][]
[4 2 5 3 1][]
[4 2 3 5 1][]
[4 2 3 1 5][]
[42 3 1][5]
[2431][5]
[2 3 4 1][5]
[2 3 1 4][5]
[2 3 1][4 5]
[2 3 1][4 5]
[2 1 3][4 5]
[21][3 4 5]
[1 2][3 4 5]
[1][2 3 4 5]
最后[1 2 3 4 5]
#include "array.h"void isortcpp(int a[],int n){ //对于长度为n的数组来说,执行n-1次后,就将前n-1大的数排好序了,只剩最小的一个数,所以遍历n-1次就够了 for(int i=0;i<n-1;i++) //对于第i次遍历,当前有序区的长度为i,那么n-i就是无序区结束位置,每次把当前的数和后一个位置比较, //那么到n-i-1时就已经把最大值交换到了无序区最后面了 for(int j=0;j<n-i-1;j++) if(a[j]>a[j+1]) swap(a[j],a[j+1]);}void isort(int a[],int n){ for(int i=0;i<n-1;i++){ for(int j=0;j<n-i-1;j++){ int t=a[j]; a[j]=a[j+1]; a[j+1]=t; } }}int main(){ int a[10]; getRandArray(a,10); print(a,10); isort(a,10); print(a,10);}
0 0
- 【算法基础】冒泡排序
- 算法基础-冒泡排序
- 基础算法 冒泡排序
- 基础算法 - 冒泡排序
- 基础算法-冒泡排序
- 算法基础--冒泡排序
- 【算法基础】冒泡排序
- 基础算法---冒泡排序法
- 基础算法之冒泡排序
- 算法基础之冒泡排序
- 算法基础1:冒泡排序
- 算法基础之冒泡排序
- 基础算法之 冒泡排序
- 算法基础之排序篇-冒泡排序
- 基础算法之排序(1)--冒泡排序
- 基础算法--排序: 之冒泡排序
- 【基础算法】选择排序与冒泡排序
- Java语言基础-排序算法-冒泡排序
- 如何修改android studio背景色(包括project view的背景色)保护眼睛人人有责
- Android自定义View之点击效果
- SpringMVC的各种参数绑定方式
- 字对齐与半字对齐
- 在项目里交叉使用Swift和OC
- 基础算法-冒泡排序
- Linux 网卡配置
- 练习2————1002
- c#中的快捷键
- Qt- “信号-槽”机制之连接类型 部分文档翻译
- 文件上传C:\fakepath\解决方案
- HDU 1796 How many integers can you find
- C++中const 、static、 static const和const static的初始化以及修改问题
- UITabBarController自定义转场动画