冒泡排序/插入排序

Posted Java开挂记录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序/插入排序相关的知识,希望对你有一定的参考价值。

一、冒泡排序


1、通过双重循环,相邻两个数据做对比,通过位置交换使其变得有序

2、时间复杂度:O(n*n);空间复杂度:O(1)

图片分析

解释:

  1. 外部循环从0开始i

  2. 内部循环从0开始j,完整循环后会将本次最大值放入数组最后,下次循环可忽略相应的尾部数据(length-i-1)

  3. 重复1、2步即可完成排序

代码实现

public class BubbleSort {
public void sort(int [] items){ //外部循环 for (int i = 0;i < items.length; i++){ //排序终止标识 boolean flag=false; //内部循环,每次循环之后相应的末尾数据就是有序的了,下次循环可忽略 for (int j = 0; j<items.length-i-1; j++){ if (items[j]>items[j+1]){ int temp = items[j]; items[j] = items[j+1]; items[j+1] = temp; flag = true; } } //如果内部循环没有需要交互的数据那么代表数据已经是有序的了 if (!flag){ break; } } }
public static void main(String[] args) { BubbleSort sort = new BubbleSort(); int [] items={3,2,5,1,8,7,4,6};// int [] items={9,8,7,6,5,4,3,2,1};// int [] items={1,2,3,4,5,6,7,8,9}; sort.sort(items); System.out.println(JSON.toJSONString(items)); }

时间复杂度:最好的情况就是完全有序的情况下为:O(n)

空间复杂度:冒泡数据交换算法只会有一个内存占用:O(1)


二、插入排序


1、外部循环从下标为1的数据开始往后循环(因为要将小的放当前数的前面,所以0没有对比的)

2、内循环从外循环的当前数据依次往前循环对比

3、如果当前值比前一个值小则往前移动

4、时间复杂度:O(n*n);空间复杂度:O(1)

图片分析

解释:

  1. 外层循环从1开始

  2. 将当前值(1的位置)提出作为基准值对比

  3. 内层循环从1往前与基准值对比,如果大于基准值,将对比值往后移动(对标图第二行)

  4. 如果小于将基准值放入移动后空出的位置(对标图第三行)

  5. 依此循环完毕

代码实现

public class InsertionSort {
public void sort(int [] items){ //外层循环从1开始,0无需往前对比 for (int i = 1 ;i < items.length ; i++){ //将要对比的基准值放入临时字段 int temp = items[i]; //内层循环从外层循环开始值往前循环和基准值对比 int j = i-1; for (;j>=0;j--){ //往前循环对比,如果比基准值大,则后移动(基准值的位置是空的) if (items[j]>temp){ items[j+1] = items[j]; }else { break; } } //将基准值插入到空出的位置 items[j+1] = temp; } }
public static void main(String[] args) { InsertionSort sort=new InsertionSort(); int [] items={6,3,7,2,4,5,1,9,8};// int [] items={9,8,7,6,5,4,3,2,1};// int [] items={1,2,3,4,5,6,7,8,9}; sort.sort(items); System.out.println(JSON.toJSONString(items)); }}


以上是关于冒泡排序/插入排序的主要内容,如果未能解决你的问题,请参考以下文章

三大基础排序算法(冒泡排序,选择排序,插入排序)

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)

[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)

直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚

总结:大厂面试常考手撕代码 —— JavaScript排序算法(冒泡排序选择排序插入排序快速排序)

四种排序算法实现