//冒泡排序

public class demo{
public static void main(String[] args) {
int[] sum={2,9,10,1,5,88};
System.out.println("==============排序前==========");
for(int i=0;i<6;i++){
System.out.print(sum[i]+"\t");
}
for(int j=1;j<=sum.length-1;j++){ //外层循环轮数
for(int k=0;k<sum.length-j-1;k++){ //内层循环次数
if(sum[k]>sum[k+1]){//交换值
int temp=sum[k];
sum[k]=sum[k+1];
sum[k+1]=temp;
}
}
}
System.out.println();
System.out.println("=======排序后=======");
for(int a=0;a<sum.length;a++){
System.out.print(sum[a]+"\t");
}
}
}

//选择排序算法,比冒泡排序简单

public class demo{

public static void main(String[] args){

int[] arr={57,68,59,89,45,52}; //定义一个整型arr数组

for(int i=0;i<arr.length-1;i++){//外层循环,循环次数就是数组的个数减1

int k=i;//标注第一个为最小值并取下标

for(int j=arr.length-1;j>i;j--){ //内层循环,取数组最后一个数

if(arr[j]<arr[k]){

k=j;

}

}

		int temp = arr[i];//交换两个数字
arr[i]=arr[k];
arr[k]=temp;
}
for(int i=0;i<arr.length;i++){ //遍历输出整个数组
System.out.print(arr[i]+"\t");
}
}

}

//快速排序

快排原理

在要排的数(比如数组A)中选择一个中心值key(比如A[0]),通过一趟排序将数组A分成两部分,其中以key为中心,key右边都比key大,key左边的都key小,然后对这两部分分别重复这个过程,直到整个有序。
        整个快排的过程就简化为了一趟排序的过程,然后递归调用就行了。

一趟排序的方法:

1,定义i=0,j=A.lenght-1,i为第一个数的下标,j为最后一个数下标
2,从数组的最后一个数Aj从右往左找,找到第一小于key的数,记为Aj;
3,从数组的第一个数Ai 从左往右找,找到第一个大于key的数,记为Ai;
4,交换Ai 和Aj 
5,重复这个过程,直到 i=j
6,调整key的位置,把A[i] 和key交换
假设要排的数组为:A[8] ={ 5 2 8 9 2 3 4 9 }
           选择 key = 5, 开始时 i=0,j=7
  index       0    1    2    3    4    5    6    7
package com.glut.demo;

import java.util.Arrays;
/**
* 快速排序
* @author qichunlin
*
*/
public class Test{
public static void main(String[] args) {
int[] a = {1, 2, 4, 5, 7, 4, 5 ,3 ,9 ,0};
System.out.println(Arrays.toString(a));
quickSort(a);
System.out.println(Arrays.toString(a)); } public static void quickSort(int[] a) {
if(a.length>0) {
quickSort(a, 0 , a.length-1);
}
} private static void quickSort(int[] a, int low, int high) {
// TODO Auto-generated method stub
//找到递归算法的出口
if(low>high) {
return;
} //2.存
int i = low;
int j = high; //3.key
int key = a[low];
//4.完成一趟排序
while(i<j) {
//4.1 ,从右往左找到第一个小于key的数
while(i<j && a[j] > key){
j--;
}
// 4.2 从左往右找到第一个大于key的数
while( i<j && a[i] <= key) {
i++;
} //4.3 交换
if(i<j) {
int p = a[i];
a[i] = a[j];
a[j] = p;
} } //4.4 调整key的位置
int p = a[i];
a[i] = a[low];
a[low] = p; //5.对key左边的数快排
quickSort(a, low, i-1); //6.对key有边的数快排
quickSort(a, i+1, high); } }

2017.12.9 Java中的排序---冒泡排序、快速排序、选择排序的更多相关文章

  1. Java中的经典算法之选择排序(SelectionSort)

    Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...

  2. Java基础知识强化12:Java中运用数组的四种排序方法

    1.使用JavaApi文档中的Arrays类中的sort()进行快速排序 首先我们直接看代码如下: package himi.text; import java.util.Arrays; public ...

  3. 2017.12.20 Java中的 IO/XML学习总结 File类详细

    IO / XML 一.File类 1.定义/概念 Java是面向对象的语言,要想把数据存到文件中,就必须要有一个对象表示这个文件.File类的作用就是代表一个特定的文件或目录,并提供了若干方法对这些文 ...

  4. 2017.12.25 Java中面向对象思想的深刻理解

    今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 * A: 面向过程与面 ...

  5. 我在北京找工作(二):java实现算法<1> 冒泡排序+直接选择排序

    工作.工作.找工作.经过1个多星期的思想斗争还是决定了找JAVA方面的工作,因为好像能比PHP的工资高点.呵呵 :-)  (其实我这是笑脸,什么QQ输入法,模拟表情都没有,忒不人性化了.) 言归正传, ...

  6. C语音中最简单的排序冒泡排序和选择排序代码实现(非指针)

    #include<stdio.h> int main() { int a[5] = { 2,5,7,3,-1 }; int n = sizeof(a) / sizeof(a[0]);//元 ...

  7. 数组排序代码,冒泡排序&快速排序&选择排序

    冒泡排序: for(var i=0;i<arr.length-1;i++){ for(var j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1 ...

  8. 2017.12.13 Java中是怎样通过类名,创建一个这个类的数组

    先在类方法中定义数组的方法: public int[] method6(int[] arr){ for(int i = 0; i<arr.length;i++){ arr[i] = (int)( ...

  9. Java版冒泡排序和选择排序

    一.理解说明 1.理解和记忆 冒泡排序:依次定位数组元素,每次只和相邻的且符合条件的元素交换位置. 选择排序:依次在数组的每个位置,通过逐个对比选择出最大或最小的元素. 2.知识点说明 (1)数组是引 ...

随机推荐

  1. openstack RPC通信

    openstack RPC通信 OpenStack 的主要组件有 Nova.Cinder.Neutron.Glance 等,分别负责云平台的计算.存储.网络资源管理.openstack 各组件之间是通 ...

  2. Docker-Zerotier

    1. 拉取镜像 docker pull zerotier/zerotier-containerized 2. 生成并运行容器 docker run \ --name=zerotier-one \ -- ...

  3. LogAspect

    import java.lang.reflect.Array; import java.lang.reflect.Method; import java.text.SimpleDateFormat; ...

  4. Testlink安装配置时常见问题解决

    1.windows下安装testlink,进入安装页面后,在检查一些相关配置环境时报错,如下: Checking if /var/testlink/logs/ directory exists [S] ...

  5. Microsoft JET Database Engine (0x80004005)未指定的错误解决

    Microsoft JET Database Engine (0x80004005)未指定的错误,这个错误只有在使用Access数据库时才能出现 出现以上问题,可以使用以下步骤进行解决问题: 1.系统 ...

  6. 三节点Hadoop集群搭建

    1. 基础环境搭建 新建3个CentOS6.5操作系统的虚拟机,命名(可自定)为masternode.slavenode1和slavenode2.该过程参考上一篇博文CentOS6.5安装配置详解 2 ...

  7. SOA框架

    SOA是什么 估计很多人都听说过SOA这个词了,但是很多人还是不知道到底什么是SOA.开发人员很容易理解为是一个Web Service,但是这绝对不是SOA,那顶多只能算是SOA的一种实现方法.那么, ...

  8. ACdream 1427—— Nice Sequence——————【线段树单点更新,区间查询】

    Nice Sequence Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Su ...

  9. 将MySQL转化为mysqli

    <?php/** * Created by PhpStorm. * User: 大神 * Date: 2017/7/24 * Time: 11:29 */ header('content-typ ...

  10. maven安装,使用说明,及maven Repository如何使用.

    maven的使用方法总结一下 1.首先去apache官网下载maven, http://maven.apache.org/download.cgi2.如果是windows系统,选择 apache-ma ...