文章目录

  • 冒泡排序
    • 源码实现
    • 单元测试
    • 优化
  • 快速排序
    • 源码实现
    • 单元测试

冒泡排序

源码实现

package csdn.dreamzuora.sort;import java.util.List;/*** Title: 冒泡排序* Description:* 冒泡排序思想是把相邻的元素进行两两比较,当前面元素大于后面元素则进行交换* @version 1.0* @author: weijie* @date: 2020/10/22 17:50*/
public class BubbleSort extends Sort<Integer>{@Overridepublic void sort(List<Integer> array) {if (array == null || array.isEmpty()){return;}int size = array.size();for (int i = 0; i < size - 1; i++){for (int j = 0; j < size - 1; j++){if (array.get(j) > array.get(j + 1)){int temp = array.get(j + 1);array.set(j + 1, array.get(j));array.set(j, temp);}}}}
}

单元测试

package csdn.dreamzuora.sort;import com.sun.deploy.util.StringUtils;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;import static org.junit.Assert.*;/*** Title:* Description:** @version 1.0* @author: weijie* @date: 2020/10/22 18:33*/
public class BubbleSortTest {BubbleSort bubbleSort = new BubbleSort();@Testpublic void sort() {List<Integer> sortList = Arrays.asList(3, 5, 4, 0, 1);List<Integer> expectList = Arrays.asList(0, 1, 3, 4, 5);bubbleSort.sort(sortList);Assertions.assertEquals(expectList, sortList);}
}

优化

package csdn.dreamzuora.sort;import java.util.List;/*** Title: 冒泡排序优化* Description:* 优化:在外层循环处,设置标志isSort,默认为排好,如果不交换则跳出本次循环* @version 1.0* @author: weijie* @date: 2020/10/22 18:50*/
public class BubbleSortPlus extends Sort<Integer>{@Overridepublic void sort(List<Integer> array) {if (array == null || array.isEmpty()){return;}int size = array.size();for (int i = 0; i < size - 1; i++){boolean isSort = true;for (int j = 0; j < size - 1; j++){if (array.get(j) > array.get(j + 1)){isSort = false;int temp = array.get(j + 1);array.set(j + 1, array.get(j));array.set(j, temp);}}if (isSort){break;}}}
}

快速排序

源码实现

package csdn.dreamzuora.sort;import java.util.List;/*** Title: 快速排序* Description:* 快速排序每一轮找出一个标准值,大于该值的放在右边,小于该值放在左边,从而把数组拆分成两部分,这种思路叫做分治法** @version 1.0* @author: weijie* @date: 2020/10/22 17:50*/
public class QuickSort extends Sort<Integer> {/**** @param a 数组* @param left 头指针* @param right 尾指针*/@Overridepublic void sort(List<Integer> a, int left, int right) {if (left >= right){return;}int value = a.get(left);//用来控制分治头指针、尾指针int i = left;int j = right;while (left < right){//先移动尾指针while (right != left && a.get(right) >= value){right --;}//再移动头指针while (left != right && a.get(left) <= value){left ++;}//如果指针重合,则确定了value下标,进行交换if (left == right){a.set(i, a.get(left));a.set(left, value);//分治sort(a, i, left - 1);sort(a, left + 1, j);}//如果指针没有重合则进行交换头尾指针值else {int temp = a.get(left);a.set(left, a.get(right));a.set(right, temp);}}}/*** 单边循环法:以后再研究* @param array*/public void sort2(List<Integer> array){}
}

单元测试

package csdn.dreamzuora.sort;import org.junit.Test;import java.util.Arrays;
import java.util.List;import static org.junit.Assert.*;/*** Title:* Description:** @version 1.0* @author: weijie* @date: 2020/10/23 18:18*/
public class QuickSortTest {QuickSort quickSort = new QuickSort();@Testpublic void sort() {List<Integer> list = Arrays.asList(5, 8, 6, 3, 9, 2, 1, 7);quickSort.sort(list, 0, list.size() - 1);System.out.println(list);}
}

冒泡排序、快速排序 java代码实现相关推荐

  1. 快速排序——Java代码实现

    快速排序 1. 基本思想 快速排序是对冒泡排序的一种改进,采用分治法的思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数 ...

  2. 快速排序java代码_8 种排序算法与 Java 代码实现!

    1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直 ...

  3. 快速排序 java代码_java实现快速排序

    一:快速排序的特征 1:冒泡排序的改进 2:内部交换数据 3:分治+递归的思想 4:稳定排序 5:时间复杂度为:O(n*logn) 二:算法的整体思路 1:原始数据:12 11 6 87 23 8 5 ...

  4. 快速排序Java代码实现

    代码实现(附注释) import java.util.Arrays;public class Main {public static void main(String[] args) {int[] a ...

  5. 经典排序算法之冒泡排序(含Java代码)

    冒泡排序: 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. ...

  6. 冒泡排序法java代码

    package 数组; import java.util.Scanner; public class 冒泡排序法 {     public static void main(String args[] ...

  7. java冒泡从大到小排序代码_Java 冒泡排序、快速排序实例代码

    冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地 进行直到没有再需要交换,也就是说该数列已经排序完成.这 ...

  8. 冒泡排序java代码_面试官问我插入排序和冒泡排序哪个更牛逼?

    (给算法爱好者加星标,修炼编程内功) 来源:小鹿动画学编程,作者:小鹿同学 写在前边 排序对于每个开发者来讲,都多多少少知道几个经典的排序算法,比如我们之前以动画形式分享的冒泡排序,也包括今天要分享的 ...

  9. Java实现快速排序详细代码

    Java代码实现 /****@author g0rez*@data 2021-05-19**/ public class 快速排序 {public static void main(String[] ...

最新文章

  1. Android App优化之延长电池续航时间
  2. globalmapper如何选取图像上的点_20. 用于纹理合成和转移的图像缝合
  3. H3C S5560交换机风扇反转告警
  4. [Flex] 组件Tree系列 —— 阻止用户点击选中Tree中分支节点
  5. 里程碑 .Net7再更新,从此彻底碾压Java!
  6. JS之Boolean的valueOf方法
  7. Linux之软件安装YUM
  8. OS开发UI篇—Quartz2D使用(截屏)
  9. Sql Server 列转行 Pivot使用
  10. JavaScript DOM基础2
  11. python定义矩阵
  12. MySQL出现Waiting for table metadata lock的场景浅析
  13. 查看系统使用率命令 vmstat 输出详解!
  14. 如何解决打印机卡纸问题 以HP LaserJet 5100 机型为例清除故障
  15. word abbreviation
  16. 计算机网络启动慢,电脑开机后网络连接图标出现的太慢了,2分钟才能出现,不出现什么都做不了,怎么办?如果手动设置...
  17. 前端预言 未来前端的发展方向
  18. 什么是PCB沉金?为什么要沉金?
  19. 金融IC卡非接触式快速支付的先天缺陷与补救措施
  20. 蓝牙室内定位,SOC芯片NRF52832

热门文章

  1. 现代程序设计 (课程设计中, 征求意见稿)
  2. python坐标轴刻度设置对数_用对数刻度设置刻度
  3. python开发框架 代码生成_我的第一个python web开发框架(31)——定制ORM(七)...
  4. JAVA入门级教学之(参数传递)
  5. 计算机网络中缓存技术,编程达人
  6. springboot api文档_SpringCloud/SpringBoot - 自动生成API文档
  7. click事件在什么时候出发_剖析setTimeout和click点击事件的触发顺序
  8. 智能指针的释放_看完这篇,别再说不会智能指针了
  9. oracle循环异常跳过,oracle异常处理00103 loop异常继续循环 异常处理选点
  10. note.js和mysql的优劣_nginx与Node.js的优缺点是什么?