博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序 一
阅读量:5080 次
发布时间:2019-06-12

本文共 2493 字,大约阅读时间需要 8 分钟。

1冒泡排序

传统冒泡排序
  

public static void bubble(int[] arr){        int temp;        for(int i=arr.length-1;i>0;i--){            for(int j=0;j
arr[j+1]){ temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } }

 

时间复杂度O(n^2),只需一个额外空间O(1),稳定
传统冒泡排序有一个缺点,不管数据是否已经排序完成都会固定执行n(n-1)/2次,
我们可以在程序中加入判断来判断何时可以提前中断程序,提高效率

public static void bubble(int[] arr){        int temp;                for(int i=arr.length-1;i>0;i--){            int flag=0;  //flag用来判断是否有执行交换的动作            for(int j=0;j
arr[j+1]){ temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; flag++; //如果有交换,flag不为0 } } if(flag==0){ break; } //当一次扫描判断后flag==0,没有交换动作,说明以完成排序,所以直接跳出循环 } }

 

2选择排序法
时间复杂度O(n^2),只需一个额外空间O(1),不稳定
  

public static void select(int[] arr){        int tmp;     for(int i=0;i

 

    
3插入排序
时间复杂度O(n),只需一个额外空间O(1),稳定,会造成数据的大量搬移,建议在链表上使用
 

public static void insert(int[] arr){        int i,j;        for(i=1;i
=0&&tmp

   

4快速排序

快速排序是不稳定的。最理想情况算法时间复杂度O(nlog2n),最坏O(n ^2)。

package example; class Demo{    public static void main(String args[]) {      int[] arr={26,17,5,33,87,53,27,49,28,78};    quick(arr,arr.length,0,arr.length-1);    System.out.println("排序结果:");    for(int a:arr){        System.out.print(a+" ");    }     }private static void quick(int[] arr, int length, int i, int j) {    int left;    int right;    int tmp;    if(i
arr[i]){ left=x; break; } left++; } for(int y=j;y>=i+1;y--){ if(arr[y]
=right){ tmp=arr[i]; arr[i]=arr[right]; arr[right]=tmp; quick(arr,length,i,right-1); quick(arr,length,right+1,j); } }}}

处理过程: [26][17][5][33][87][53][27][49][28][78]

处理过程: [5][17][26][33][87][53][27][49][28][78]
处理过程: [5][17][26][33][87][53][27][49][28][78]
处理过程: [5][17][26][33][28][53][27][49][87][78]
处理过程: [5][17][26][33][28][27][53][49][87][78]
处理过程: [5][17][26][27][28][33][53][49][87][78]
处理过程: [5][17][26][27][28][33][53][49][87][78]
处理过程: [5][17][26][27][28][33][49][53][87][78]
排序结果:
5 17 26 27 28 33 49 53 78 87

 

转载于:https://www.cnblogs.com/xurui1995/p/5233856.html

你可能感兴趣的文章
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
poj1611 简单并查集
查看>>
Ubuntu 14.04下安装CUDA8.0
查看>>
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
PIGOSS
查看>>
软件目录结构规范
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
蓝桥杯-分小组-java
查看>>
Android Toast
查看>>
JAVA面试常见问题之Redis篇
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>