面试的时候经常会遇到面试官让你直接手写排序算法,下面是冒泡排序和快速排序的实现。

冒泡排序

基本流程就是,自下而上比较相邻的两个元素进行比较,让大的元素往下面沉,较小的往上冒。按照排序规则进行比较,如果是跟排序的规则相反就需要调整互换。

package cn.test1;import org.apache.commons.lang.ArrayUtils;public class BubbleSort {public static void main(String[] args) {int[] array = { 1, 12, 34, 3, 56, 6, 9, 10, 12 };bubbleSort(array);for (int i : array) {System.out.println(i);}}public static void bubbleSort(int[] array) {if (ArrayUtils.isEmpty(array)) {return;}int length = array.length;for (int i = 0; i < length - 1; i++) {for (int j = 1; j < length - 1; j++) {if (array[j] > array[j + 1]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}}

快速排序:

基本思想:先找准基数,随意选择数组一个元素,作为基数,不过一般选择数组头或者尾作为基数,如果选择了其他的元素,也要首先交换到末尾或者头。

分区过程:比基数大的放在右边,比基数小的放在左边。重复下去就可以排序了。

看下代码,自己试试,debug一下,会更清楚些。

package cn.test1;public class QuickSort {public static void main(String[] args) {QuickSort qs = new QuickSort();int[] array = { 78, 34, 12, 64, 5, 4, 62, 99, 98, 5, 18, 23, 34, 15, 51 };qs.sort(array);}public void sort(int[] array) {quickSort(array, 0, array.length - 1);}/*** 通过划分,基于分治思想,递归执行子任务排序最后合并* * @param low*            数组首位索引* @param high*            数组末尾索引*/public void quickSort(int[] array, int low, int high) {int middleIndex;if (low < high) {middleIndex = getMiddleIndex(array, low, high);quickSort(array, low, middleIndex - 1);quickSort(array, middleIndex + 1, high);}}/*** 简单划分方法*/public int getMiddleIndex(int[] array, int i, int j) {int pivot = array[i]; // array[i] 就是 第一个坑while (i < j) {while (i < j && array[j] >= pivot) {j--; // 从右向左找出小于基准数pivot的数来填充array[i]}if (i < j) {array[i] = array[j]; // 将array[j]填充到array[i]中,array[j]就形成了一个新的坑i++;}while (i < j && array[i] <= pivot) {i++; // 从左向右找出大于基准数pivot的数来填充array[j]}if (i < j) {array[j] = array[i]; // 将array[i]填充到array[j]中,array[i]就形成了一个新的坑j--;}}array[i] = pivot; // 退出时,i等于j。将pivot填到这个坑中。return i;}
}

转载于:https://blog.51cto.com/shangdc/1921323

java 冒泡排序和快速排序 实现相关推荐

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

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

  2. 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)...

    不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...

  3. java冒泡排序 快速排序_Java必备-冒泡排序,选择排序,快速排序(纯代码实现)

    importjava.util.Arrays;/*** 是将无序a[0],a[1]...a[n],将其升序排序,比较a[0].a[1]的值,若结果为1,则交换两者的值,否则不变,接着继续向下比较.最后 ...

  4. java冒泡排序_Java专题(二):Java中常见的排序算法有哪些?---冒泡排序

    排序相关的的基本概念排序: 将一组杂乱无章的数据按一定的规律顺次排列起来. 数据表( data list): 它是待排序数据对象的有限集合. 排序码(key):通常数据对象有多个属性域,即多个数据成员 ...

  5. 冒泡排序代码_凡人能看懂的冒泡排序和快速排序(附动态图和代码详解))

    这是第一篇公众号文章,所以内容打算写的浅简一点. 这篇文章将主要介绍两种非常普遍的排序方式:冒泡排序和快速排序.内容包括两种排序的原理,代码剖析,以及时间复杂度分析. 因为注意到很多快排的文章在介绍完 ...

  6. 常用排序:冒泡排序与快速排序详解,看完这篇就够了!风马博客

    常用排序:冒泡排序与快速排序详解. 在排序算法中,冒泡排序和快速排序可以算是排序算法入门必会的两种排序了,今天和大家来分析一下如何快速理解并掌握这两种排序.首先冒泡排序是初学者最常用的排序,所以我们先 ...

  7. c语言数组项目按身高排序,过三关 Java冒泡排序选择排序插入排序小练习

    材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选 ...

  8. 【算法之家】——交换排序之冒泡排序与快速排序

    [前言] 冒泡排序和快速排序属于交换排序,快速排序是冒泡排序的一种改进算法.我更觉得快速排序更像是一种特殊的二分查找,从两头开始查找,用法更加的巧妙! [内容] 冒泡排序的基本过程用如下的动态图表示: ...

  9. 冒泡和快速排序的时间复杂度_凡人能看懂的冒泡排序和快速排序

    这是第一篇公众号文章,所以内容打算写的浅简一点. 这篇文章将主要介绍两种非常普遍的排序方式:冒泡排序和快速排序.内容包括两种排序的原理,代码剖析,以及时间复杂度分析. 因为注意到很多快排的文章在介绍完 ...

最新文章

  1. 张一鸣:10年面试2000人,我发现混得好的人,全都有同一个特质
  2. 公司--》字符串截取
  3. autoconfig oracle,ORACLE EBS 执行autoconfig time out
  4. linux文件目录类命令|--rmdir指令
  5. 使用wdcp面板安装感恩教师节wordpress网站
  6. 25 Refs转发机制与在高阶组件中的使用
  7. Python数据结构与算法(四)--顺序表
  8. 小财靠勤,中财靠德,大财靠命,现在多少钱才是小财?
  9. 用 mCustomScrollbar 滚动条插件实现滚动更新添加数据
  10. PMSM的MTPA曲线绘制及其参数拟合——基于Matlab的AppDesigner
  11. 如何修改PDF文件内的文字的字体和颜色?
  12. 实现类似于目录的虚线填充样式
  13. WEB入门.九 导航菜单
  14. 你知道CDN是什么吗?本文带你搞明白CDN
  15. 【渝粤题库】广东开放大学 综合英语1 形成性考核
  16. DSP BIOS任务通信和同步(pend/post举例)
  17. 世界杯最野蛮大战,巴西付出慘重代价步入四强
  18. 怎样才能在微信朋友圈发长视频?
  19. excel操作记录——条形图
  20. Spark学习-入门介绍

热门文章

  1. 亮剑.NET的系列文章之.NET实现三层架构(三)
  2. enumeration学习
  3. 解决了一个遗留的Portlet奇怪问题
  4. spacemacs各种问题修复方法
  5. 给网站管理员的建议:创建可利用的、可抓取的网站
  6. 用ASP.Net(C#)连接Oracle数据库的方法
  7. ColorMatrix 彩色矩阵
  8. VC提前注入.net软件的方法
  9. vigra1.8.0的使用
  10. 【FFmpeg】降低转码延迟方法、打印信息详解、refcounted_frames详解