一、冒泡排序:

package com;import java.util.Arrays;public class BubbleSort {public static Integer[] bubbleSort(Integer[] data) {// 数组长度int len = data.length;// 临时变量int temp = 0;// 冒泡次数for (int i = 0; i < len-1; i++) {// 交换次数for (int j = 0; j < len-i-1; j++) {if (data[j]>data[j+1]) {temp = data[j];data[j] = data[j+1];data[j+1] = temp;}}}return data;}public static Integer[] bubbleSort2(Integer[] data) {int temp = 0;// 第一层循环是跑的趟数for (int i = 0; i < data.length; i++) {// 第二层循环是比较次数for (int j = i; j < data.length; j++) {if (data[i]>data[j]) {temp = data[i];data[i] = data[j];data[j] = temp;}}}return data;}public static void main(String[] args) {Integer[] data = {9,5,6,2,7,8,1,3};
//        int[] result = bubbleSort(data);Integer[] result = bubbleSort(data);System.out.println(Arrays.toString(result));}}

View Code

说明:

1.时间复杂度:O(n^2)、空间复杂度:O(1)

2.算法稳定性:稳定

3.算法描述:每一次外层循环结束之后都可以把最大的数放在顶端,所以外层循环就是每趟都把最大的数往顶层放。内层循环就是把两两数据进行比较,如果前一个比后一个大,就交换,依次比较完整个数组。

二、选择排序:

package com;
import java.util.Arrays;public class SelectSort {public static Integer[] selectSort(Integer[] data) {int len = data.length;for (int i = 0; i < len; i++) {int temp = data[i];int position = i;for (int j = i+1; j < len; j++) {if (data[j]<temp) {temp = data[j];position = j;}}data[position] = data[i];data[i] = temp;}return data;}public static void main(String[] args) {/**5 9 6 2 7 8  1 3**/Integer[] data = {9,5,6,2,7,8,1,3};Integer[] result = selectSort(data);System.out.println(Arrays.toString(result));}
}

View Code

说明:

1.时间复杂度:O(n^2)、空间复杂度:O(1)

2.算法稳定性:不稳定

3.算法描述:第一次循环先拿第一个数作为基准,依次和后面的数进行比较,每一次外层循环都可以确定出最大或者最小的数,后面依此类推。

三、插入排序:

package com;import java.util.Arrays;public class InsertSort{public static Integer[] insertSort(Integer[] data){int len = data.length;int insertNum;for(int i=1;i<len;i++){insertNum = data[i];int j=i-1;while(j>=0&&data[j]>insertNum){data[j+1] = data[j];j--;}data[j+1] = insertNum;}return data;}public static void main(String[] args) {/**5 9 6 2 7 8  1 3**/Integer[] data = {9,5,6,2,7,8,1,3};Integer[] result = insertSort(data);System.out.println(Arrays.toString(result));}
}

View Code

说明:

1.时间复杂度:O(n^2)、空间复杂度:O(1)

2.算法稳定性:稳定

3.算法描述:第一次循环先拿第二个数和第一个做比较,如果第二个数大于第一个数,就相互交换。第二次循环又把第三个数拿来和前面两个排好序作比较,看是否交换,依此类推。

三、快速排序:

package com;import java.util.Arrays;public class QuickSort{public static Integer partition(Integer[] data, int start, int end){int temp = data[start];while(start<end){if(start<end&&data[end]>temp){end -= 1;}data[start] = data[end];if(start<end&&data[start]<temp){start += 1;}data[end] = data[start];}data[start] = temp;return start;}public static Integer[] quickSort(Integer[] data, int start, int end){int middle;if(start<end){middle = partition(data,start, end);quickSort(data,start, middle-1);quickSort(data,middle+1,end);}return data;}public static void main(String[] args){Integer[] data = {9,5,6,2,7,8,1,3};Integer[] result = quickSort(data, 0 ,data.length-1);System.out.println(Arrays.toString(result));}
}

View Code

说明:

1.时间复杂度:O(nlog2n)、空间复杂度:O(nlog2n)

2.算法稳定性:不稳定

3.算法描述:思想是“分而治之”,第一次循环是先拿第一个数作为基准,把比第一个数大的数放在它的右边,把比第一个数小的数放在它的左边。

转载于:https://www.cnblogs.com/crazy-xf/p/10024562.html

JAVA常见的排序算法相关推荐

  1. java常见的排序算法_常见排序算法及Java实现

    先上个总图↓: ①.直接插入排序 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并 ...

  2. access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法

    排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...

  3. java常用的排序算法的思想以及实现

    一些常见的排序算法的事项以及java实现 由于时间上的原因没有计算时间复杂度,以后有时间补上,或者大家有兴趣的可以自己算算 package com.sgcc.cn;import java.util.A ...

  4. 七种常见的排序算法总结

    目录 引言 1.什么是排序? 2.排序算法的目的是什么? 3.常见的排序算法有哪些? 一,插入排序 1.基本思想 2.代码实现 3.性能分析 4.测试 二,希尔排序(缩小增量排序) 1.基本思想 2. ...

  5. Java常见的面试算法题:实现两个线程交替打印1到100的数

    Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...

  6. 排序算法java源代码_排序算法汇总(java实现,附源代码)

    整理系统的时候发现了原来写的各种算法的总结,看了一下,大吃一惊,那时候的我还如此用心,具体的算法,有的已经模糊甚至忘记了,看的时候就把内容整理出来,顺便在熟悉一下,以后需要的时候就可以直接过来摘抄了. ...

  7. PHP面试题:请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。

    常见的排序算法: 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. 冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键 ...

  8. python常用算法有哪些_python常见的排序算法有哪些?

    大家都知道,关于python的算法有很多,其中最为复杂的就是python的排序算法,因为它并不是单一的,而是复杂的,关于排序算法就有好几种不同的方式,大家可以根据以下内容,结合自己的项目需求,选择一个 ...

  9. Java回炉之排序算法

    Java回炉之排序算法 Java回炉之排序算法 冒泡排序 插入排序 归并排序 快速排序 希尔排序 选择排序 堆排序 冒泡排序 一次次遍历数组,每次比较相邻两个. 两重循环,内层比较index和inde ...

最新文章

  1. enote笔记语言(2)(ver0.3)
  2. DOS批处理高级教程精选(七)
  3. 插件、页面-在csdn写markdown,基于chrome插件-by小雨
  4. linux 服务器基本信息,查看linux服务器基本信息
  5. 健康管理-健康管理特点
  6. Installshield获取安装包版本的系统变量是IFX_PRODUCT_VERSION
  7. 学习如何写PHP MVC框架(1) -- 路由
  8. 手机APP夏季促销UI设计PSD模板|糖果色彩,抓住眼球
  9. 统计字符串中每个字符的个数_C++程序设计——统计数字字符个数
  10. 力扣-989 数组形式的整数加法
  11. linux安装curl扩展
  12. 【spring源码分析】spring中类型转换器详解
  13. 计算机图形学在游戏设计中的应用
  14. 蚂蚁金服收购印度外卖APP?
  15. 三分钟教你开通支付宝收款二维码
  16. NLPCC论文LaTeX封面生成代码
  17. 数据结构:求两个有序列表的交集,并集
  18. python 编程基础案例
  19. Tomcat for win7 搭建集群
  20. 基于CNN的垃圾分类识别系统

热门文章

  1. RocketMQ原理解析-producer 4.发送分布式事物消息
  2. PHP中的多行字符串传递给JavaScript方法两则
  3. April Fools Contest 2017 题解源码(A,数学 B,数学 C,数学 D,字符串 E,数字逻辑 F,排序,卡时间,G,数学)...
  4. 我是一个内向的人,也是一个不善交际的人
  5. Spring框架中的设计模式(一)
  6. 多线程:同步和异步的优缺点比较
  7. 杨辉三角python语言程序思路_python杨辉三角方法的实例介绍
  8. Facebook全球宕机近7小时,传有15亿用户数据泄漏,市值蒸发千亿
  9. python 升级setuptools_linux 安装/升级 python3+setuptools+pip
  10. CSDN粉丝解答:六月份第一期精选——互联网笔试编程解决、简单bug处理、编程系统设计等