JAVA常见的排序算法
一、冒泡排序:
![](/assets/blank.gif)
![](/assets/blank.gif)
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.算法描述:每一次外层循环结束之后都可以把最大的数放在顶端,所以外层循环就是每趟都把最大的数往顶层放。内层循环就是把两两数据进行比较,如果前一个比后一个大,就交换,依次比较完整个数组。
二、选择排序:
![](/assets/blank.gif)
![](/assets/blank.gif)
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.算法描述:第一次循环先拿第一个数作为基准,依次和后面的数进行比较,每一次外层循环都可以确定出最大或者最小的数,后面依此类推。
三、插入排序:
![](/assets/blank.gif)
![](/assets/blank.gif)
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.算法描述:第一次循环先拿第二个数和第一个做比较,如果第二个数大于第一个数,就相互交换。第二次循环又把第三个数拿来和前面两个排好序作比较,看是否交换,依此类推。
三、快速排序:
![](/assets/blank.gif)
![](/assets/blank.gif)
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常见的排序算法相关推荐
- java常见的排序算法_常见排序算法及Java实现
先上个总图↓: ①.直接插入排序 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并 ...
- access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法
排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...
- java常用的排序算法的思想以及实现
一些常见的排序算法的事项以及java实现 由于时间上的原因没有计算时间复杂度,以后有时间补上,或者大家有兴趣的可以自己算算 package com.sgcc.cn;import java.util.A ...
- 七种常见的排序算法总结
目录 引言 1.什么是排序? 2.排序算法的目的是什么? 3.常见的排序算法有哪些? 一,插入排序 1.基本思想 2.代码实现 3.性能分析 4.测试 二,希尔排序(缩小增量排序) 1.基本思想 2. ...
- Java常见的面试算法题:实现两个线程交替打印1到100的数
Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...
- 排序算法java源代码_排序算法汇总(java实现,附源代码)
整理系统的时候发现了原来写的各种算法的总结,看了一下,大吃一惊,那时候的我还如此用心,具体的算法,有的已经模糊甚至忘记了,看的时候就把内容整理出来,顺便在熟悉一下,以后需要的时候就可以直接过来摘抄了. ...
- PHP面试题:请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。
常见的排序算法: 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. 冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键 ...
- python常用算法有哪些_python常见的排序算法有哪些?
大家都知道,关于python的算法有很多,其中最为复杂的就是python的排序算法,因为它并不是单一的,而是复杂的,关于排序算法就有好几种不同的方式,大家可以根据以下内容,结合自己的项目需求,选择一个 ...
- Java回炉之排序算法
Java回炉之排序算法 Java回炉之排序算法 冒泡排序 插入排序 归并排序 快速排序 希尔排序 选择排序 堆排序 冒泡排序 一次次遍历数组,每次比较相邻两个. 两重循环,内层比较index和inde ...
最新文章
- enote笔记语言(2)(ver0.3)
- DOS批处理高级教程精选(七)
- 插件、页面-在csdn写markdown,基于chrome插件-by小雨
- linux 服务器基本信息,查看linux服务器基本信息
- 健康管理-健康管理特点
- Installshield获取安装包版本的系统变量是IFX_PRODUCT_VERSION
- 学习如何写PHP MVC框架(1) -- 路由
- 手机APP夏季促销UI设计PSD模板|糖果色彩,抓住眼球
- 统计字符串中每个字符的个数_C++程序设计——统计数字字符个数
- 力扣-989 数组形式的整数加法
- linux安装curl扩展
- 【spring源码分析】spring中类型转换器详解
- 计算机图形学在游戏设计中的应用
- 蚂蚁金服收购印度外卖APP?
- 三分钟教你开通支付宝收款二维码
- NLPCC论文LaTeX封面生成代码
- 数据结构:求两个有序列表的交集,并集
- python 编程基础案例
- Tomcat for win7 搭建集群
- 基于CNN的垃圾分类识别系统
热门文章
- RocketMQ原理解析-producer 4.发送分布式事物消息
- PHP中的多行字符串传递给JavaScript方法两则
- April Fools Contest 2017 题解源码(A,数学 B,数学 C,数学 D,字符串 E,数字逻辑 F,排序,卡时间,G,数学)...
- 我是一个内向的人,也是一个不善交际的人
- Spring框架中的设计模式(一)
- 多线程:同步和异步的优缺点比较
- 杨辉三角python语言程序思路_python杨辉三角方法的实例介绍
- Facebook全球宕机近7小时,传有15亿用户数据泄漏,市值蒸发千亿
- python 升级setuptools_linux 安装/升级 python3+setuptools+pip
- CSDN粉丝解答:六月份第一期精选——互联网笔试编程解决、简单bug处理、编程系统设计等