几种排序算法(JAVA)

一、代码

package com.hdwang;

import java.util.Arrays;

/**
* Created by admin on 2017/1/20.
*/
public class Sort { /**
* 冒泡排序(最小数冒泡)
* @param array 数组
*/
public void bubbleSort(int[] array){
for(int i=0;i< array.length-1;i++){ //比多少次
for(int j= i+1;j<array.length;j++){ //每次循环,将最小数提前
if(array[i]>array[j]){ //小数冒泡
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
} /**
* 选择排序(选择最小值置前,较冒泡排序空间占用多,速度快(少了交换))
* @param array 数组
*/
public void selectSort(int[] array){
for(int i=0;i<array.length-1;i++){
int minIndex = i;
for(int j=i+1;j<array.length;j++){
if(array[j]<array[minIndex]){
minIndex = j; //最小值位置
}
}
//交换最小值与第i位的值
if(minIndex != i){
int tmp = array[minIndex]; //最小值
array[minIndex] = array[i];
array[i] = tmp;
}
}
} /**
* 插入排序(大数后移,小数插入前面,理论上比选择排序空间大,速度快)
* @param array 数组
*/
public void insertSort(int[] array){
for(int i=1;i< array.length;i++){
int tmp = array[i]; //暂存i位的元素,空出来
int j = i;
for(;j > 0 && tmp < array[j-1]; j--){ //前面的大数移到后面来
array[j] = array[j-1];
}
array[j] = tmp; //tmp插入准确位置
}
} /**
* 快速排序(理论上比插入排序空间占用大,排序速度更快)
* @param array 数组
* @param lowIndex 低位索引
* @param highIndex 高位索引
*/
public void quickSort(int[] array,int lowIndex,int highIndex){
if(lowIndex >= highIndex){
return; //退出递归
}
int base = array[lowIndex]; //基准数(小的放其左边,大的放其右边)
int low = lowIndex; //副本
int high = highIndex; //副本
while(low<high){
while(low<high){ //从后面往前找到一个比base小的数,放到前面去(low的位置上去)
if(array[high] < base){
array[low] = array[high];
low++;
break;
}
high--;
}
while(low<high){ // 从前面往后找到一个大于或等于base的数,放到后面去(high的位置上去)
if(array[low] >= base){
array[high] = array[low];
high--;
break;
}
low++;
}
}
array[low] = base; //low==high 结束 quickSort(array,lowIndex,low-1); //递归排序前一段
quickSort(array,low+1,highIndex); //递归排序后一段
} public static void main(String[] args) {
int[] array = {2,3,1,6,9,5,4,2};
System.out.println(Arrays.toString(array)); Sort sort = new Sort();
// sort.bubbleSort(array);
// sort.selectSort(array);
// sort.insertSort(array);
sort.quickSort(array,0,array.length-1);
System.out.println(Arrays.toString(array)); }
}

、输出结果

[2, 3, 1, 6, 9, 5, 4, 2]
[1, 2, 2, 3, 4, 5, 6, 9]

几种简单的排序算法(JAVA)的更多相关文章

  1. java实现几种简单的排序算法

    public class SimpleAri { public static void main(String[] args) { int[] t = {11, 21, 22, 1, 6, 10, 3 ...

  2. 四种简单的排序算法的php实现

    无聊,用php写几个排序算法,算法介绍请移步这里,这里使用php实现了几个简单的,如下 //选择排序 function selection_sort($arr){ $len = count($arr) ...

  3. 几种常见的排序算法Java实现总结

    public class MySort { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:&q ...

  4. Python实现几种简单的排序算法

    一.冒泡排序 概念:为一个无序的列表排成有序的 实现过程描述:(升序) 1.比较相邻的元素,如果第一个比第二个大,就交换他们的位置 2.对每一对相邻元素重复1的工作,从开始第一队到最后一对,最后结束的 ...

  5. 八大排序算法Java实现

    本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...

  6. python3实现几种常见的排序算法

    python3实现几种常见的排序算法 冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...

  7. java讲讲几种常见的排序算法(二)

    java讲讲几种常见的排序算法(二) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 堆排序 思路:构建一个小顶堆,小顶堆就是棵二叉树,他的左右孩子均大于他的根节点( ...

  8. java讲讲几种常见的排序算法

    java讲讲几种常见的排序算法(一) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 以数组array={6,3,20,8,15,1}为例 冒泡排序 思路:从第0个到 ...

  9. 8种排序算法 Java实现

    冒泡排序 O(n2) 两个数比较大小,较大的数下沉,较小的数冒起来. public static void bubbleSort(int[] a) { //临时变量 int temp; //i是循环次 ...

随机推荐

  1. 20155235 《网络攻防》 实验九 Web安全基础

    20155235 <网络攻防> 实验九 Web安全基础 实验内容 SQL注入攻击 XSS攻击 CSRF攻击 WebGoat WebGoat是OWASP组织研制出的用于进行web漏洞实验的应 ...

  2. Verilog中的有符号计算之认知补码

    Verilog中的有符号计数,一般是自己定义的而不是像C语言之类的定义一个有符号变量就好了.所以,要想在FPGA的世界里随心所欲的进行有符号运算,必须先对补码有一个很好的认知,然后再注意Verilog ...

  3. VS与Opencv的亲密接触之安装配置过程

    最近想把FPGA采集的图像,上传到上位机显示,看到Opencv能帮大忙,所以就折腾折腾! 我用的是VS2012和opencv-2.4.10-2.4.10(目前的最新版本),那个版本无所谓,本文都将适用 ...

  4. python 网络爬虫介绍

    一.网络爬虫相关概念 网络爬虫介绍 我们都知道,当前我们所处的时代是大数据的时代,在大数据时代,要进行数据分析,首先要有数据源,而学习爬虫,可以让我们获取更多的数据源,并且这些数据源可以按我们的目的进 ...

  5. Redis简介、安装、配置、启用学习笔记

    前一篇文章有介绍关系型数据库和非关系型数据库的差异,现在就来学习一下用的较广的非关系型数据库:Redis数据库 Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-v ...

  6. 程序员大佬推荐的java学习路线

    作为我的第一篇博客,我第一个想到的就是在校时就看到的这篇文章.并且在之后的时间里自己都反复观看过,有时候这不单单是一篇学习路线,也是审视自己技术能力的里程碑,和激励自己的鞭挞绳. 先来个书籍清单: & ...

  7. 【原】Github+Hexo+NextT搭建个人博客【1】

    该系列博客列表请访问:http://www.cnblogs.com/penglei-it/category/934299.html 摘要 GitHub 是一个开源项目的托管网站,相信很多人都听过.在上 ...

  8. LevelDB原理解析

    LevelDb有如下一些特点: 首先,LevelDb是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上. 其次, ...

  9. 机器学习初入门01-numpy的基础用法

    一.numpy基础结构 1. numpy.genformtxt('路径名', delimiter = '分割符', dytype = 读取方式如str ):读取一个文件,返回一个numpy.ndarr ...

  10. 区块链学习:Windows下搭建以太坊私有链环境

    一:安装geth客户端 Windows要求必须是64位系统,从官方网站下载编译好的win64客户端,下载解压后只有一个Geth.exe问价,运行安装即可,下载地址如下: https://github. ...