冒泡排序的原生实现方式(不要大意,不要闪,面试常考)
Posted 五角钱的程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序的原生实现方式(不要大意,不要闪,面试常考)相关的知识,希望对你有一定的参考价值。
第一时间关注技术干货!
✨一起学习、成长、温情的热爱生活✨
冒泡排序是一种比较简单的排序算法,它循环走过需要排序的元素,依次比较相邻的两个元素,如果顺序错误就交换,直至没有元素交换,完成排序。
若对n个人进行排序,我们需要n-1次比较,所以第k次比较需要进行n-k次比较。排序算法通过以数据对象的两两比较作为关键,所以可以得出,冒泡排序需要进行的
比较次数为:(n-1) + (n-2) + ... + 1 = n*(n-1) / 2
,因此冒泡排序的时间复杂度为O(n^2)
。
基本思想: 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。
直观表达,每一趟遍历,将一个最大的数移到序列末尾。
算法简介:
比较相邻的元素,前一个比后一个大(或者前一个比后一个小)调换位置
每一对相邻的元素进行重复的工作,从开始对一直到结尾对,这步完成后,结尾为做大或最小的数.
针对除了最后一个元素重复进行上面的步骤。
重复1-3步骤直到完成排序
动画演示:
Java中冒泡排序的原生实现方式(正序和逆序)
需求
给定数组,ary=[2,4,5,3,1], 如何升序或逆序排列?
原生方法
提示: Arrays.sort只能升序排列, 先用双重for循环,原生方法实现.
public class T02 {
public static void main(String[] args) {
//冒泡升序
int [] ary = {1,4,5,6,7,8,3,2};
for (int i = 0; i <ary.length ; i++) {
for (int j = (i+1); j <ary.length ; j++) {
if (ary[i]>ary[j]){
// 交换两者的值
int c = ary[i];
ary[i] = ary[j];
ary[j] = c;
}
}
}
// 写在双重for循环外面
for (int i1 : ary) {
System.out.print(i1);
}
}
}
打印结果: 12345678
降序的实现只需要更改 if( ) 中条件,让 ary[i] < ary[j] 即可.
简便方法
利用Arrays.sort数组方法实现升序:
代码如下:
// Array.sort排序
int [] ary = {2,4,1,3,5,6,8,7,9};
Arrays.sort(ary);
for (int i1 : ary) {
System.out.print(i1);
}
System.out.println();
// 倒序排列,没有方法
for (int i = ary.length-1; i > -1 ; i--) {
System.out.print(ary[i]);
}
System.out.println();
结束!
推荐阅读:
可爱且懂得生活的研究生一枚(码农一枚)。
"一起学习、成长、温情的热爱生活。"
私人微信|zijietiaodongpro (字节跳动pro)
CSDN|知乎|github|掘金:五角钱的程序员
关注福利
送几百本常用技术类电子书籍
以上是关于冒泡排序的原生实现方式(不要大意,不要闪,面试常考)的主要内容,如果未能解决你的问题,请参考以下文章