排序1:冒泡排序
来源:互联网 发布:软件项目关键技术指标 编辑:程序博客网 时间:2024/04/30 11:26
题目:对于一个int数组,请编写一个冒泡排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:[1,2,3,5,2,3],6 输出:[1,2,2,3,3,5]
思路:冒泡排序原理很简单:遍历n次,每次遍历找出一个最大的元素放到数组的最后面,第一次遍历从0开始对相邻两个元素进行比较,将较大的元素进行交换是指位于后面的位置,即总是比较a[i]与a[i+1]两个元素,i从0开始到length-2;完成第一次排序后找出了最大的元素并将其放到了末尾;然后再次遍历i从0开始到length-3,每次比较相邻两个元素大小,将大的交换到后面,完成第二次排序后找出了倒数第二大的元素并将其放到了倒数第二个位置,依次类推,程序是一个2重循环,外层循环范围是每一次未排序的范围,从i=length-1开始到i=1;内层循环从j=0开始到j=i-1;时间复杂度O(n^2),空间复杂度O(1),稳定。
每次循环将当前数组中的最大值移动到数组末尾的有序位置,于是每次循环之后需要排序的数组范围就会缩小一个元素。于是外层循环代表当前需要进行排列的数组范围需要不断缩小。写代码时注意边界值的界定,可以通过具体化来帮助确定。
import java.util.*;//冒泡排序:每次遍历将最大的元素相邻交换到数组的最后面,需要排序的数组范围逐渐减小public class BubbleSort { public int[] bubbleSort(int[] A, int n) { //特殊输入 if(A==null||A.length<=0) return A; int temp=0; //双重遍历,外层遍历表示需要排序的数组范围,从i=A.length-1逐渐减小到i=0 for(int i=A.length-1;i>=0;i--){ for(int j=0;j<=i-1;j++){ if(A[j]>A[j+1]){ //交换相邻的两个元素A[j]与A[j+1],将大的向后移动 temp=A[j+1]; A[j+1]=A[j]; A[j]=temp; } } } return A; }}
0 0
- 排序1 冒泡排序
- 排序(1) -- 冒泡排序
- 排序1-冒泡排序
- 排序1-冒泡排序
- 排序1:冒泡排序
- 排序-1-冒泡排序
- [排序算法1] - 冒泡排序
- 排序(1)冒泡排序
- 排序算法(1)-冒泡排序
- 排序(1)-冒泡排序
- 排序算法1-冒泡排序
- 排序篇(1)--冒泡排序
- 排序(1)冒泡排序
- 冒泡排序1
- 冒泡排序改进-1
- 排序1--冒泡(蛮力法)
- 1、冒泡排序
- 冒泡排序(1)
- 3分钟弄明白JAVA三大修饰符
- sublime text 3 + python配置,完整搭建及常用插件安装
- 三.Mybatis高级查询
- 二叉排序树的建立与查找
- Android动画(二),属性动画
- 排序1:冒泡排序
- 在PHP5.3以上版本运行ecshop和ecmall出现的问题及解决方案
- LeetCode题目:376. Wiggle Subsequence
- Is there anybody in there?
- Android MVP模式实战
- meta http-equiv属性
- Xsehll 无法远程登录阿里云Ubuntu服务器——ssh拒绝登陆
- js的双等号隐式转换规则
- 排序2:选择排序