冒泡排序、快速排序 java代码实现
文章目录
- 冒泡排序
- 源码实现
- 单元测试
- 优化
- 快速排序
- 源码实现
- 单元测试
冒泡排序
源码实现
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代码实现相关推荐
- 快速排序——Java代码实现
快速排序 1. 基本思想 快速排序是对冒泡排序的一种改进,采用分治法的思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数 ...
- 快速排序java代码_8 种排序算法与 Java 代码实现!
1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直 ...
- 快速排序 java代码_java实现快速排序
一:快速排序的特征 1:冒泡排序的改进 2:内部交换数据 3:分治+递归的思想 4:稳定排序 5:时间复杂度为:O(n*logn) 二:算法的整体思路 1:原始数据:12 11 6 87 23 8 5 ...
- 快速排序Java代码实现
代码实现(附注释) import java.util.Arrays;public class Main {public static void main(String[] args) {int[] a ...
- 经典排序算法之冒泡排序(含Java代码)
冒泡排序: 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. ...
- 冒泡排序法java代码
package 数组; import java.util.Scanner; public class 冒泡排序法 { public static void main(String args[] ...
- java冒泡从大到小排序代码_Java 冒泡排序、快速排序实例代码
冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地 进行直到没有再需要交换,也就是说该数列已经排序完成.这 ...
- 冒泡排序java代码_面试官问我插入排序和冒泡排序哪个更牛逼?
(给算法爱好者加星标,修炼编程内功) 来源:小鹿动画学编程,作者:小鹿同学 写在前边 排序对于每个开发者来讲,都多多少少知道几个经典的排序算法,比如我们之前以动画形式分享的冒泡排序,也包括今天要分享的 ...
- Java实现快速排序详细代码
Java代码实现 /****@author g0rez*@data 2021-05-19**/ public class 快速排序 {public static void main(String[] ...
最新文章
- Android App优化之延长电池续航时间
- globalmapper如何选取图像上的点_20. 用于纹理合成和转移的图像缝合
- H3C S5560交换机风扇反转告警
- [Flex] 组件Tree系列 —— 阻止用户点击选中Tree中分支节点
- 里程碑 .Net7再更新,从此彻底碾压Java!
- JS之Boolean的valueOf方法
- Linux之软件安装YUM
- OS开发UI篇—Quartz2D使用(截屏)
- Sql Server 列转行 Pivot使用
- JavaScript DOM基础2
- python定义矩阵
- MySQL出现Waiting for table metadata lock的场景浅析
- 查看系统使用率命令 vmstat 输出详解!
- 如何解决打印机卡纸问题 以HP LaserJet 5100 机型为例清除故障
- word abbreviation
- 计算机网络启动慢,电脑开机后网络连接图标出现的太慢了,2分钟才能出现,不出现什么都做不了,怎么办?如果手动设置...
- 前端预言 未来前端的发展方向
- 什么是PCB沉金?为什么要沉金?
- 金融IC卡非接触式快速支付的先天缺陷与补救措施
- 蓝牙室内定位,SOC芯片NRF52832
热门文章
- 现代程序设计 (课程设计中, 征求意见稿)
- python坐标轴刻度设置对数_用对数刻度设置刻度
- python开发框架 代码生成_我的第一个python web开发框架(31)——定制ORM(七)...
- JAVA入门级教学之(参数传递)
- 计算机网络中缓存技术,编程达人
- springboot api文档_SpringCloud/SpringBoot - 自动生成API文档
- click事件在什么时候出发_剖析setTimeout和click点击事件的触发顺序
- 智能指针的释放_看完这篇,别再说不会智能指针了
- oracle循环异常跳过,oracle异常处理00103 loop异常继续循环 异常处理选点
- note.js和mysql的优劣_nginx与Node.js的优缺点是什么?